【发布时间】:2021-01-28 10:29:53
【问题描述】:
在我的项目中,我想打开一些端口 xxxx,需要写入数据并关闭该端口 XXXX。
再次,我想重新打开同一个端口并写入数据并关闭。这是我的要求。
第一次我可以写和关闭,但第二次绑定没有发生。我不知道为什么可能是代码问题或其他任何问题。
这是我的代码。
int main(void)
{
int connection;
int sock = create_socket(40056);
struct sockaddr_in client_address;
int len = sizeof(client_address);
connection = accept(sock, (struct sockaddr*) &client_address,&len);
close(connection);
close(sock);
sock = create_socket(40056);
connection = accept(sock, (struct sockaddr*) &client_address,&len);
}
int create_socket(int port)
{
int sockfd;
struct sockaddr_in servaddr;
int reuse = 1;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1) {
PRINTF("socket creation failed...\r\n");
}
else
PRINTF("Socket successfully created..\r\n");
// assign IP, PORT
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(port);
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof reuse);
// Binding newly created socket to given IP and verification
if ((bind(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)))
!=0) //here typedef &servaddr
{
PRINTF("socket bind failed...\r\n");
}
else
PRINTF("Socket successfully binded.. %d\r\n",port);
listen(sockfd, 5);
PRINTF("finished create socket function\r\n");
return sockfd;
}
【问题讨论】:
-
"... 绑定没有发生。我不知道为什么..." - “没有发生”到底是什么意思。对
bind的调用是否失败?如果是,您得到的确切错误是什么(即检查errno,致电perror或类似的)?另外请检查您调用的所有函数的返回值,即还要检查setsockopt。