我正在试着写一个非常简单的程序,它只监听一个预定义的port.here的代码:
#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命令检查程序是否正在侦听。
发布于 2014-10-15 07:12:27
您缺少一个accept()调用。
此外,您正在退出程序。
socket将仅在您的进程期间处于活动状态。
发布于 2014-10-15 07:11:38
您已经拥有了大部分的部分,但是忘记了调用accept()。否则,您的程序可能只会快速返回,而不会做任何有用的事情。
发布于 2014-10-15 07:21:30
您的程序确实会监听,但它会立即退出,因此它所做的任何事情都会消失在以太中。如果你想接受连接,你必须调用accept()。
您还需要对这些调用中的每一个进行错误检查。你不能简单地假设他们都成功了。
https://stackoverflow.com/questions/26371875
复制相似问题