c - 为什么程序不执行main中的打印语句?

标签 c asyncsocket

#include <sys/socket.h>
#include<stdio.h>
#include <netinet/in.h>
#include<string.h>
int init_socket(int *fd, int port){
    struct sockaddr_in serv_addr, cli_addr;
    *fd = socket(AF_INET, SOCK_STREAM, 0);
    memset((char *) &serv_addr, 0, sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_addr.s_addr = INADDR_ANY;
    serv_addr.sin_port = htons(port);
    bind(*fd, (struct sockaddr *) &serv_addr,
                      sizeof(serv_addr))
    listen(*fd,1); //Change as per requirement
}

int connect_server()
{
    int fd, j, result;
    fd_set readset;
    init_socket(&fd,6001);
        while(1){
          FD_ZERO(&readset);
          FD_SET(fd, &readset);
          select(3, &readset, NULL, NULL, NULL);
          }
}

int main(){
printf("Main Start");
connect_server();
printf("Main End");
}

我正在尝试执行此代码,但没有显示 printf()。当从代码中删除 select() 时,printf() 可以正常工作。为什么会出现这种情况?

最佳答案

stdio 已缓冲。您应该调用fflush(3) (或者至少以 printf 结束每个 \n 格式字符串)。所以添加

 fflush(NULL);

在你的select之前打电话。

顺便说一句,更好地使用poll(2)然后select 。了解 C10K problem

您的代码应该测试系统调用的失败,例如 socket , connect , selectpoll等等……例如使用perror

此外,还可以使用所有警告和调试信息 ( gcc -Wall -g ) 进行编译,并了解如何使用调试器 ( gdb ),以及 strace(1) .

关于c - 为什么程序不执行main中的打印语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26016769/

相关文章:

c - 需要澄清简单的 C 字符串初始化概念

c - 我是否要转换 malloc 的结果?

c# - 预期使用IAsyncResult BeginSend的方法

cocoa - Asyncsockets 和 "silent"断开连接

c - sscanf 返回正确数量的参数,即使最后一个输入错误

c - 如何限制用户输入?

c - 你好,我想删除链表中的一个节点,但是我不能,我想了一整天,在我看来,它可以很好地工作

c - 使用 libev 的套接字

android - 如何确定给定请求是否正在运行?

C# 异步 TCP 服务器矫枉过正?