IO::Socket — 네트워크 소켓

IO::Socket — 네트워크 소켓

IO::Socket 롤은 소켓에 대한 읽기·쓰기 메서드를 담고 있어요. 보통은 IO::Socket::INET을 통해 사용하게 돼요.

role IO::Socket { ... }

출처: Raku Documentation — IO::Socket

본문

메서드 (Methods)

method recv

method recv(IO::Socket:D: Cool $elems = Inf, :$bin)

패킷을 받아 반환해요. :bin을 넘겼으면 Blob으로, 아니면 Str로 반환하죠. 최대 $elems 또는 65535(둘 중 작은 값) 바이트 또는 문자를 받아요.

소켓이 이전에 :bin이 아닌 모드로 읽힌 적 있다면, 다시 :bin 모드로 읽는 것이 항상 안전하진 않아요. 디코더에 따라 :bin 읽기가 디코더가 미리 읽어둔 바이트를 건너뛰어 바이트와 문자의 순서를 망칠 수 있어요. 이 효과는 UTF-8 디코더에서, 이전에 디코딩된 문자가 여전히 결합 문자(combiner)를 받을 수 있을 때 발생할 수 있어요.

Rakudo 2024.07 이전 버전에서는 이진 읽기와 비이진 읽기를 섞는 것이 지원되지 않아요.

소켓이 연결되어 있지 않으면 실패해요.

method read

method read(IO::Socket:D: Int(Cool) $bytes)

소켓에서 $bytes 바이트를 읽어 Blob으로 반환해요.

recv 메서드에서 설명한 이진·비이진 읽기 혼합의 주의점이 동일하게 적용돼요.

소켓이 연결되어 있지 않으면 실패해요.

routine get

method get(IO::Socket:D: --> Str:D)

소켓에서 입력 한 줄을 읽고, 뒤따르는 새 줄 문자(.nl-in으로 설정된)를 제거해요. 더 이상 입력이 없으면 Nil을 반환해요.

소켓이 연결되어 있지 않으면 실패해요.

method print

method print(IO::Socket:D: Str(Cool) $string)

주어진 문자열을 소켓에 써서 연결의 다른 쪽으로 보내요. 이진 버전은 write 메서드예요.

소켓이 연결되어 있지 않으면 실패해요.

method write

method write(IO::Socket:D: Blob:D $buf)

주어진 버퍼를 소켓에 써서 연결의 다른 쪽으로 보내요. 문자열 버전은 print 메서드예요.

소켓이 연결되어 있지 않으면 실패해요.

method put

method put(IO::Socket:D: Str(Cool) $string)

주어진 문자열에 \n을 덧붙여 소켓에 써서 연결의 다른 쪽으로 보내요.

소켓이 연결되어 있지 않으면 실패해요.

method close

method close(IO::Socket:D)

소켓을 닫아요.

소켓이 연결되어 있지 않으면 실패해요.

method native-descriptor

method native-descriptor()

운영체제가 '소켓 디스크립터'로 이해하는 값을 반환해요. setsockopt처럼 소켓 디스크립터를 인자로 요구하는 네이티브 함수에 넘기기에 적합해요.