2012-03-21 2 views
0

나는 장치에 연결하려고하는 동안 루프가 있습니다. 문제는 다시 시도 할 때마다 동일한 소켓 설명자를 사용하고 있습니다 (닫은 후 다시 열 수 있음). 안전합니까?거기에 C + +/리눅스에서 소켓 addersses를 재사용하는 방법입니다

while(retry) 
    create socket 
    read(use socket created before) 
    if read fails 
    close socket and retry 

새로운 소켓 fd를 서버에 연결하고 다시 읽으려고합니다. 읽기가 실패 할 경우 동일한 것을 다시 사용하고 있습니까?

답변

2

close 소켓을 사용하는 경우 소켓을 설명하는 데 사용 된 fd은 현재 유효하지 않으므로 새 소켓을 만드는 것이 좋습니다. 동일한 파일 설명자를 다시 사용하면 오류가 발생할 수 있습니다.

일반적으로 이전 버전을 닫고 새 버전을 만드는 것이 좋습니다.

+0

소켓을 닫고 새 소켓을 만들지 만, 소켓 fd 'x'를 닫은 후 바로 새 소켓을 만들려고하면 새 소켓 fd로 'x'가 표시됩니다. – maheshg

+0

@ user1035818 이것은 절대적으로 좋습니다. 오래된'fd'와 그것과 관련된 모든 것들이 OS에 다시 공개되었으므로, 당신이 얻는 숫자가 같아도 자원은 새로운 것입니다. – Karlson

+0

@ user1035818 관련 질문 : http://stackoverflow.com/questions/4160347/close-vs-shutdown-socket – Karlson

1

소켓에서 바인드 또는 연결을 호출 했으므로 주소를 변경할 수 없습니다. 소켓을 닫고 새 소켓을 만들어야합니다.

관련 문제