这是代码
tcp_sockfd = socket(AF_INET , SOCK_STREAM , 0);
if (tcp_sockfd == -1) {
printf("Could not create socket");
return 1;
}
if (connect(tcp_sockfd , (struct sockaddr *)&config->tcp_srvaddr , sizeof(config->tcp_srvaddr)) < 0) {
printf("connect failed. return 1\n");
return 1;
}
struct timeval tv = {30, 0};
setsockopt(tcp_sockfd, SOL_SOCKET, SO_RCVTIMEO, (struct timeval *)&tv, sizeof(struct timeval));
if(send(tcp_sockfd , data , len , 0) < 0) {
printf("send failed.\n");
return 1;
}
printf("Send complete\n");
close(tcp_sockfd);
如果套接字发送或连接失败,我是否关闭套接字? 或者如果错误时钟组自动关闭?
答案 0 :(得分:4)
套接字永远不会自行关闭。完成套接字后,需要调用close
来释放描述符。
请注意,无论连接本身是否打开,套接字都将作为连接句柄保持打开状态。关闭连接(例如,使用shutdown
或由另一方启动)不会关闭套接字。