[英]error in binding port “Address already in use” TCP socket programming in unix
[英]Problems creating and binding port in unix. (New to network programming)
我在Unix中创建端口时遇到问题。 这段代码不断返回“错误创建套接字(3)”,这毫无意义,因为sockfd必须小于0才能打印错误行。
server.c:
int main (int argc, char **argv)
{
int sockfd;
struct sockaddr_in server_sockaddr;
char buff[TRANSFER_BUFFER_LEN];
/* check number of command line arguments */
if (argc < 2)
{
fprintf (stderr, "Usage: %s <port>\n");
exit (EXIT_FAILURE);
}
/* create server socket */
if ((sockfd = createUdpSocket (&sockfd,
&server_sockaddr,
atoi (*(argv + 1)))
) < 0);
{
fprintf (stderr, "Error creating socket (%d).\n", sockfd);
exit (EXIT_FAILURE);
}
...
return 0;
}
socket_utils.h:
int createUdpSocket (int *sockfd, struct sockaddr_in *client_sockaddr, int port)
{
/* create socket */
if ((*sockfd = socket (AF_INET, SOCK_DGRAM, 0)) == -1)
return -1;
memset (client_sockaddr, 0, sizeof (struct sockaddr_in));
client_sockaddr->sin_family = AF_INET;
client_sockaddr->sin_addr.s_addr = htonl (INADDR_ANY);
client_sockaddr->sin_port = htons (port);
/* bind socket */
if (!bind (*sockfd, (struct sockaddr*) &client_sockaddr, sizeof (sockfd)))
{
close (*sockfd);
return -2;
}
return *sockfd;
}
有任何想法吗? 这个函数在我的不带端口值的客户端程序中也可以正常工作(取值为0)。
干杯,
里斯
if ((sockfd = createUdpSocket (&sockfd,
&server_sockaddr,
atoi (*(argv + 1)))
) < 0);
哎呀,那个分号是哪里来的? 你有个偷东西!
此外,此行将无法满足您的期望:
if (!bind (*sockfd, (struct sockaddr*) &client_sockaddr, sizeof (sockfd)))
bind()
函数成功返回0,失败返回-1。 您的测试是向后的,并且在绑定成功而不是失败时会出错。 它还有一个不正确的&
您在哪里说&client_sockaddr
。 第三个参数必须是sockaddr_in
结构的大小,而不是sizeof(sockfd)
。 尝试:
if (bind (*sockfd, (struct sockaddr*) client_sockaddr, sizeof (struct sockaddr_in)) != 0)
哎呀,当我们在这里时,您的用法打印输出缺少其argv[0]
参数:
fprintf (stderr, "Usage: %s <port>\n");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.