thread 와 send, sendto

mithrandir의 이미지

다중 쓰레드를 이용하여 프로그램을 짤 때,

send, sendto 에 대해서 동기처리를 해야 하는지 궁금합니다.

send, sendto 가 여러 쓰레드에서 동시에 불릴 경우 패킷이 섞여서 가거나 하는 문제가 없을까요?

sunyzero의 이미지

atomic 을 지원하지 않는 함수라면 하나의 소켓에 대해서 데이터를 동시에 여러쓰레드가 넣었을때 문제가 발생할 수 있습니다.

보통 write()계열의 함수에서는 PIPE_BUF 사이즈만큼까지만 atomic을 보장해주기 때문에 이보다 더 길게 전송하는 경우는 mutex를 걸어주셔야 합니다.

========================================
* The truth will set you free.

bugiii의 이미지

소켓에 보내기 큐를 따로 구현하셔도 됩니다. 보내기가 한번에 안될 경우도 있기 때문에 큐처리를 하는 것도 좋았습니다.