我试图编写一个非常简单的程序,它只是监听预定义的端口。代码是:
#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命令检查程序是否正在侦听。
答案 0 :(得分:1)
您错过了accept()
来电。
此外,您正退出该计划。
socket
仅在您的流程期间有效。
答案 1 :(得分:0)
你有大部分但忽略了调用accept()。没有它,你的程序可能只是快速返回,而没有做任何有用的事情。
答案 2 :(得分:0)
你的程序确实在听,但它会立即退出,所以它所做的任何事情都会消失。如果您想接受连接,则必须致电accept()
。
您还需要对每个呼叫进行错误检查。你不能假设他们都成功了。