더북(TheBook)

len은 데이터의 길이다. 기술적으로 UDP 데이터그램의 최대 길이는 8바이트 헤더를 포함해 65,535바이트인데, 헤더의 길이 필드가 16비트이기 때문이다. 그렇지만 분열 없이 보낼 수 있는 패킷의 최대 길이는 링크 계층의 MTU로 결정된다는 것을 상기하자. 이더넷의 MTU는 1,500바이트인데, 이조차도 전부 게임 데이터의 페이로드로 쓸 수 있는 건 아니고 여러 계층의 헤더와 여타 패킷 래퍼를 포함할 수 있게 공간이 필요하다. 따라서 분열을 피하려면 데이터그램의 길이는 1,300바이트 이내로 해야 한다는 걸 명심하자.

flags는 데이터 전송을 제어하는 비트 플래그이다. 대부분 게임 코드에선 0으로 둔다.

to는 수신자의 목적지를 가리키는 sockaddr이다. 여기의 주소 패밀리는 소켓을 만들 때 지정한 주소 패밀리와 일치해야 한다. 이 인자에 설정한 주소와 포트가 IP 헤더와 UDP 헤더로 복사되어 패킷의 IP 주소 및 UDP 포트가 된다.

tolensockaddr의 길이를 지정한다. IPv4에선 그냥 sizeof(sockaddr_in)을 넣어준다.

동작이 성공하면 sendto() 함수는 송신 대기열에 넣은 데이터의 길이를 리턴한다. 이외의 경우 -1을 리턴한다. 양수 값이 리턴되었다 해서 데이터그램 전송이 완료되었다는 것은 아니며, 네트워크 모듈의 전송 대기열에 지금 막 등록되었다는 정도로 이해해야 한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.