안녕하세요.

제가 당면한 문제에 대하여 고수님들의 고견을 듣고자 글을 쓰게 되었습니다.


현재 Ethernet Socket 통신을 이용하여 data를 전송하는 프로그램 작성하는 중에 비정상적인 종료에 대하여

문제에 부딧혔습니다.

즉, 통신중에 LAN Cable을 뽑았을 경우 일정시간 이후에 Socket를 종료하고 system을 초기화하는 기능을 

넣을려고 하는데요.

LAN Cable을 뽑는 순간 data 전송함수 (Write함수 or Send함수)에서 멈춰버리는 현상이 발생합니다.

이 부분을 위하여 Non-Blocking기능을 활성화하여 사용했습니다만, 멈춰버리는 현상은 동일하게 발생하고

있습니다.


 * Test했던 Non-Blocking option.

   - fcntl( server, F_SETFL, flag | O_NONBLOCK );

   - setsockopt(server, SOL_SOCKET, SO_SNDTIMEO,(struct timeval *)&tv,sizeof(struct timeval)))

   - send(server, fb, psize, MSG_DONTWAIT)



멈춰버리는 프로세스를 kill을 이용하여 강제로 죽여버려도 해당 Port는 아래와 같이 사용중으로 나와있습니다.

( 20000, 20001 port를 사용하고 있습니다.)


[root@C1_Progect /]# netstat

Active Internet connections (w/o servers)

Proto Recv-Q Send-Q Local Address           Foreign Address         State

tcp        0      0 10.1.1.120:20000        10.1.1.24:51684         ESTABLISHED

tcp        0      0 10.1.1.120:1021         10.1.1.10:2049          ESTABLISHED

tcp        0  43008 10.1.1.120:20001        10.1.1.24:51685         ESTABLISHED



고수님들의 고견을 부탁드립니다.