服务端没有 listen,客户端发起连接建立,会发生什么?

早上看到一个读者说面字节三面的时候,问了这个问题:

服务端没有 listen,客户端发起连接建立,会发生什么?

这位读者的角度是以为服务端没有调用 listen,客户端会 ping 不通服务器,很明显,搞错了。

ping 使用的协议是 ICMP,属于网络层的事情,而面试官问的是传输层的问题。

针对这个问题,服务端如果只 bind 了 IP 地址和端口,而没有调用 listen 的话,然后客户端对服务端发起了 TCP 连接建立,此时那么会发生什么呢?

# 做个实验

这个问题,自己做个实验就知道了。

我用下面这个程序作为例子,绑定了 IP 地址 + 端口,而没有调用 listen。

    /*******服务器程序  TCPServer.c ************/
    #include <stdlib.h>
    #include <stdio.h>
    #include <errno.h>
    #include <string.h>
    #include <netdb.h>
    #include <sys/types.h>
    #include <netinet/in.h>
    #include <sys/socket.h>
    
    int main(int argc, char *argv[])
    {
        int sockfd, ret;
        struct sockaddr_in server_addr;
    
        /* 服务器端创建 tcp socket 描述符 */
        sockfd = socket(AF_INET, SOCK_STREAM, 0);
        if(sockfd < 0)
        {
            fprintf(stderr, "Socket error:%s\n\a", strerror(errno));
            exit(1);
        }
    
        /* 服务器端填充 sockaddr 结构 */
        bzero(&server_addr, sizeof(struct sockaddr_in));
        server_addr.sin_family = AF_INET;
        server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
        server_addr.sin_port = htons(8888);
      
      /* 绑定 ip + 端口 */
        ret
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值