데이터 송수신 함수에 대한 질문입니다

해결됨
유영재 프로필

결국 소켓도 하나의 fd니까 read, write로 sendto와 recvfrom을 대체할 수 있다고 생각해서 찾아봤는데 서버 연결 유무에 따라서 사용할 수 있고 없고가 결정된다고 나와있습니다.

즉 TCP는 서버가 연결되어있기 때문에 write, read를 사용할 수 있고, UDP는 아니라고 되어있는데

서버 연결과 read, write에 대해 자세히 설명해주실 수 있나요?

ProgCoach4U 프로필
ProgCoach4U 2달 전

이해하신 부분이 맞습니다. 연결이 되어 있는 소켓에 대해서는 read/write 사용이 가능하고, 연결이 되어 있지 않은 소켓에 대해서는 read/write 사용이 불가능 합니다. 

소켓의 상태와 API의 형태를 생각해보시면 이해하시기 쉬울 것 같아요. 소켓을 연결하고 사용하는 경우(예: TCP)에는 이미 연결되어 있으므로 송수신 시 대상 소켓에 대한 명세를 할 필요가 없죠. 그렇기 때문에 send/recv/write/read 계열의 API 사용이 가능합니다. 소켓을 연결해놓고 사용하지 않는 경우(예: UDP)에는 송수신 시 대상 소켓에 대한 명세를 해야 합니다. 그래야 커널이 해당 메시지를 어디로 보낼지 알 수 있겠죠? 이런 경우 sendto/recvfrom이 사용될 수 있습니다.

이해가 되셨을지 모르겠네요. 또 다른 질문 있으시면 추가 문의 남겨주세요~

유영재 프로필
유영재 2달 전

오 이해했습니다~