개발자가 될 때 까지..
Sending a reset in TCP/IP Socket connection
#Command #사용자변수
#소켓재사용 #socket #reuseaddr
소켓이 비정상적으로 끊어지더라도 data 손실을 방지하기 위해서 버퍼에 있는 소켓은 바로 버려지지 않는다고 한다.
그래서 소켓을 금방 재시작시키면 남아 있는 data가 전송되어 통신에 문제를 주기도 한다.
socket 라이브러리에는 이를 해결할 수 있도록 비정상 종료시 버퍼에 있는 data를 어떻게 할 것인가에 대한 옵션을 가지고 있다.
" socket.SO_LINGER " 이라는 옵션인데 사용방법이 Linux와 Window에서 조금 다르다.
포멧 형식이 달라서 그런거라고 한다. Window는 Struct linger에서 shour를 사용하지만, Linux는 int를 사용하기 때문이라고...
C
socket_name.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER, struct.pack('ii', l_onoff, l_linger))
위와 같은 방법으로 사용한다고 보면 되며 window일경우, ii 부분을 hh로 수정해야한다.
동작이 정말로 되는 것인지는 아직 정확하게 확인을 못해보았다.
Python
socket_name.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
'개발자 레니는 지금 - > 공부하는 중' 카테고리의 다른 글
👻 SSL(TLS)에 대하여, 간단히 알아보는 대칭키/공개키 (0) | 2018.09.04 |
---|---|
메모리 관리, 동적할당 (0) | 2018.07.16 |
스크립트 언어 (1) | 2018.06.27 |
ISO 언어 코드 테이블 (2) | 2018.06.26 |
Thread, Process 너희들 참 어렵구나.. (0) | 2018.06.19 |