相关疑难解决方法(0)

与epoll异步连接和断开连接(Linux)

我需要使用epoll for Linux为tcp客户端进行异步连接和断开连接.有分机.Windows中的函数,如ConnectEx,DisconnectEx,AcceptEx等...在tcp服务器标准接受函数正在工作,但在tcp客户端无法正常工作连接和断开...所有套接字都是非阻塞的.

我怎样才能做到这一点?

谢谢!

sockets linux asynchronous epoll tcp

8
推荐指数
1
解决办法
3万
查看次数

在非阻塞套接字连接中,select()始终返回1

我有这个代码段,旨在使用套接字连接连接到服务器.但是,如果它无法在一定时间内连接到服务器,我希望它停止尝试.我尝试使用这个非阻塞套接字和select命令执行此操作,但select总是返回1,表示当我提供的地址不存在时服务器存在.有任何想法吗?

SOCKET tcp_client( char *hname, char *sname )  {    
    fd_set fdset;
    struct sockaddr_in peer;
    SOCKET s;
    FD_ZERO(&fdset);
    // FD_SET(STDIN, &fdset);
    FD_SET(s, &fdset);
    errno=1;
    struct timeval tv;
    tv.tv_sec = 15;
    set_address( hname, sname, &peer, "tcp" );
    s = socket( AF_INET, SOCK_STREAM, 0 );

    int n = 1;
    fcntl(s, F_SETFL, O_NONBLOCK);

    if ( !isvalidsock( s ) )
    {
        printf("Socket Call Failed: %s\n", strerror(errno));
        return(0);
    }

    int x = 0;

    int status = connect( s, ( struct sockaddr * )&peer, sizeof( peer ) …
Run Code Online (Sandbox Code Playgroud)

c sockets select nonblocking connect

7
推荐指数
2
解决办法
1万
查看次数

连接后非阻塞套接字选择返回1

首先,我想说这是另一个问题而不是这个:类似但不一样

我的代码看起来像这样:

struct addrinfo hints, *res;
struct sockaddr* serveraddr;

memset(&hints, 0, sizeof(hints));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;

int res2 = getaddrinfo(ip, port, &hints, &res);
printf("getaddrinfo() res: %d, %d\n", res2, errno);

serveraddr = res->ai_addr;

//create new socket

int soc = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
printf("socket() res: %d, %d\n", socket, errno);

//set nonblocking mode
unsigned long on = 1;
res2 = ioctl(soc, FIONBIO, &on);
printf("ioctl() res: %d\n, %d", res2, errno);

res2 = connect(soc, serveraddr, sizeof(struct sockaddr));
printf("connect() res: %d, %d\n", res2, …
Run Code Online (Sandbox Code Playgroud)

c sockets linux nonblocking select-function

2
推荐指数
1
解决办法
2693
查看次数

标签 统计

sockets ×3

c ×2

linux ×2

nonblocking ×2

asynchronous ×1

connect ×1

epoll ×1

select ×1

select-function ×1

tcp ×1