这是我的代码
#include "basic.h"
#include "bp_socket.h"
int setup_tcp(char *port)
{
struct sockaddr_in server_addr;
in_port_t server_port;
int sock;
int retval; //return value
if ((server_port = atoi(port)) < 0)
{
server_port = (in_port_t)DEFAULT_PORT;
fprintf(stderr, "Error port: %d in line %d\n", (int)server_port, __LINE__);
//fprintf(stderr, "Use default port: %d\n", DEFAULT_PORT);
}
sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sock < 0)
{
return sock;
}
retval = listen(sock, 40);
if (retval < 0)
{
return retval;
}
memset(&server_addr, 0, sizeof(struct sockaddr_in));
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(server_port);
server_addr.sin_family = AF_INET;
retval = bind(sock, (struct sockaddr*)&server_addr, sizeof(server_addr));
if (retval < 0)
{
perror("bind");
return retval;
}
return sock;
}
int main()
{
printf("%d\n", setup_tcp("4558"));
perror("");
return 0;
}
我调试我的代码,然后我发现bind()
返回-1
我用谷歌搜索并阅读了手册页,但我找不到答案。
函数setup_tcp
是创建socket,并绑定(bind)地址。
然后返回套接字
或errno值
。
如何解决。我已经多次阅读我的代码。
谢谢!
最佳答案
您应该将listen
移到bind
之后。
如果套接字已绑定(bind),bind
将返回错误,而未绑定(bind)套接字上的 listen
会自动将其绑定(bind)到随机端口号。
关于c - Linux网络编程中bind()得到 "Invalid argument"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13585010/