【问题标题】:nothing happens when trying to listen on a port尝试侦听端口时没有任何反应
【发布时间】:2014-12-09 21:36:10
【问题描述】:

我正在尝试编写一个非常简单的程序,它只侦听预定义的端口。代码如下:

#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 命令检查程序是否正在监听。

【问题讨论】:

  • 听完后你需要一个循环来处理传入的连接。

标签: c sockets listen


【解决方案1】:

您错过了一个accept() 电话。

你也正在退出程序。

socket 将仅在您的进程期间处于活动状态。

【讨论】:

    【解决方案2】:

    你有大部分的部分,但忽略了调用accept()。否则,您的程序可能会很快返回而没有做任何有用的事情。

    【讨论】:

      【解决方案3】:

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

      您还需要对这些调用中的每一个进行错误检查。你不能只是假设他们都成功了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-08
        • 2023-04-04
        • 1970-01-01
        • 2015-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多