में सॉकेट कनेक्शन को पूरी तरह से कैसे नष्ट करें मैंने सॉकेट का उपयोग करके लिनक्स में चैट क्लाइंट बनाया है, और मैं कनेक्शन को पूरी तरह से नष्ट करना चाहता हूं। पीछा कर रहा है कोड के प्रासंगिक अंश:सी
int sock, connected, bytes_recieved , true = 1, pid;
char send_data [1024] , recv_data[1024];
struct sockaddr_in server_addr,client_addr;
int sin_size;
label:
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("Socket");
exit(1);
}
if (setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&true,sizeof(int)) == -1)
{
perror("Setsockopt");
exit(1);
}
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(3128);
server_addr.sin_addr.s_addr = INADDR_ANY;
bzero(&(server_addr.sin_zero),8);
if (bind(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr))== -1)
{
perror("Unable to bind");
exit(1);
}
if (listen(sock, 5) == -1)
{
perror("Listen");
exit(1);
}
printf("\nTCPServer Waiting for client on port 3128");
fflush(stdout);
connected = accept(sock, (struct sockaddr *)&client_addr,&sin_size);
//necessary code
close(sock);
goto label;
लेकिन करीब (जुर्राब) क्योंकि 'लेबल' कोड त्रुटि संदेश
दिखा बाहर निकलने है जाने के बाद, पूरी तरह से कनेक्शन को नष्ट बंद करने के लिए doesnot लगतेUnable to bind: Address already in use
यह कनेक्शन फिर से नहीं हो रहा है। समस्या क्या हो सकती है? अग्रिम में धन्यवाद।
संपादित करें: मैं वास्तव में क्या चाहता हूं, जब मैं कनेक्शन को नष्ट करने के बाद शुरुआत से स्क्रिप्ट चलाता हूं, तो इसे एक नए कार्यक्रम के रूप में चलाया जाना चाहिए। मैं यह कैसे कर सकता हूं?
आप ऐसा क्यों कर रहे हैं? आपको 'स्वीकृति' से पहले लूप करना चाहिए, सर्वर सॉकेट को दोबारा नहीं बनाना चाहिए। – Mat
आप 'स्वीकार()' के आसपास लूपिंग के बजाय सुनवाई सॉकेट को बंद और फिर से खोलना क्यों चाहते हैं? – dwalter
संभावित डुप्लिकेट [SO_REUSEADDR (सेटॉकोपट विकल्प) का अर्थ क्या है - लिनक्स?] (Http://stackoverflow.com/questions/3229860/what-is-the-meaning-of-so-reuseaddr-setsockopt-option- लिनक्स) –