2017-11-28 9 views
0

関連Cはじめに警告!
こんにちは、私はCでアプリケーションを書いていると私は、サーバーとのソケット接続を閉じて、特定の間隔で再び開く問題があります。基本的にソケットハンドルを解放し、同じポートを再度開きます。現在持っているコードは次のとおりです。Windows Cソケット閉じると再接続

int main(){ 

char ipaddr[15] = "xxx.xxx.xxx.xxx"; 
int port = xxxxx; 
SOCKET s; 
WSADATA wsa; 
WSAStartup(MAKEWORD(2,2),&wsa); 
s = socket(AF_INET,SOCK_STREAM,0); 
struct sockaddr_in connect_info; 
connect_info.sin_family = AF_INET; 
connect_info.sin_port = htons(port); 
connect_info.sin_addr.s_addr = inet_addr(ipaddr); 

int status = connect(s,(struct sockaddr*)&connect_info,sizeof(connect_info)); 
send(s,"message with original socket",29,0); //send message with the first socket 

Sleep(5); 
//do something with setsocketopt to set the socket to not linger somehow 
closesocket(s); 

status = connect(s,(struct sockaddr*)&connect_info,sizeof(connect_info)); 
send(s,"message with reconnected socket",32,0); //send message 2 using reconnected socket 

//Cleanup 
closesocket(s); 
WSACleanup(); 

return 0; 
} 

可能であれば、例を残してください。どんな助けでも大歓迎です!

+0

*ソケット接続を閉じる際に問題があります。*何か問題がありますか? –

+0

あなたが見せてくれたことは上手く見えます。あなたはもっと具体的になりますか?どのような問題がありますか?実際のコードではエラーをチェックしますか?エラーを返すことができる関数(あなたが呼んでいるものすべて)は失敗しますか? –

+0

2番目のメッセージは送信されず、2番目の接続は-1を返しますが、ソケットハンドルを解放する必要があります。 –

答えて

2

接続を確立する前に、ソケットを閉じた後でソケットを再度作成する必要があります。

closesocket(s); 
s = socket(AF_INET,SOCK_STREAM,0); 
status = connect(s,(struct sockaddr*)&connect_info,sizeof(connect_info)); 
+0

ありがとう、それは働いた! –

関連する問題