도와주세요!!
안녕하세요.
제가 당면한 문제에 대하여 고수님들의 고견을 듣고자 글을 쓰게 되었습니다.
현재 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
고수님들의 고견을 부탁드립니다.
Non-Blocking이면 이상이 없어야 하는게 정상같습니다.
아래 링크를 참고 하셔서 다시 테스트 해보시길 발랍니다.
http://forum.falinux.com/zbxe/index.php?document_srl=520963&mid=network_programming