![](/img/trans.png)
[英]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.