我之前提出了一个问题,其中一个答案涉及到另一个问题。
也就是说,一般情况下,接收端应该创建两个套接字来建立接收端。像这样:
Python
from socket import *
sockfd = socket(...)
# ...
client_sockfd, addr = sockfd.accept()
# ...
client_sockfd.close()
sockfd.close()
C
int sockfd, client_sockfd;
sockfd = socket(...);
// ...
client_sockfd = accept(sockfd, ...);
// ...
shutdown(client_sockfd, 2);
shutdown(sockfd, 2);
close(client_sockfd);
close(sockfd);
那么我们可以跳过创建client_sockfd
变量的任务吗?像这样:
Python
sockfd = socket(...)
# ...
sockfd, addr = sockfd.accept()
# ...
sockfd.close()
C
int sockfd;
struct sockaddr_in server, client;
socklen_t client_size = sizeof(client);
sockfd = socket(...);
// ...
sockfd = accept(sockfd, (struct sockaddr *)&client, &client_size);
或者是这样的:
Python
sockfd = socket(...)
# ...
client_sockfd, addr = sockfd.accept()
sockfd.close()
# ...
client_sockfd.close()
C
int sockfd = socket(...);
int client_sockfd;
// ...
client_sockfd = accept(sockfd, ...);
shutdown(sockfd, 2);
close(sockfd);
// ...
shutdown(client_sockfd, 2);
close(client_sockfd);
如上代码所示,我们是否可以只使用一个套接字来完成整个网络编程的接受端?这样做有什么问题吗?(至少我自己编写程序时没有遇到任何问题)