在尝试收听端口时没有任何反应

时间:2014-10-14 23:05:54

标签: c sockets listen

我试图编写一个非常简单的程序,它只是监听预定义的端口。代码是:

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <arpa/inet.h>
int main(int argc, char *argv[])
{
int sockfd;
struct addrinfo hints,*res;
memset(&hints,0,sizeof(hints));
hints.ai_family=AF_UNSPEC;
hints.ai_socktype=SOCK_STREAM;
hints.ai_flags=AI_PASSIVE;

getaddrinfo(NULL,"5050",&hints,&res); 
sockfd=socket(res->ai_family,res->ai_socktype,res->ai_protocol);
bind(sockfd,res->ai_addr,res->ai_addrlen); //returns 0(success)
listen(sockfd,1);//returns 0(success)
return 0;
}

但是没有任何地方监听的迹象。我使用netstat -l命令检查程序是否正在侦听。

3 个答案:

答案 0 :(得分:1)

您错过了accept()来电。

此外,您正退出该计划。

socket仅在您的流程期间有效。

答案 1 :(得分:0)

你有大部分但忽略了调用accept()。没有它,你的程序可能只是快速返回,而没有做任何有用的事情。

答案 2 :(得分:0)

你的程序确实在听,但它会立即退出,所以它所做的任何事情都会消失。如果您想接受连接,则必须致电accept()

您还需要对每个呼叫进行错误检查。你不能假设他们都成功了。