小编use*_*403的帖子

如何在Linux平台上使用select在非阻塞套接字上设置SSL_connect

我试图使用select函数来实现从客户端到服务器的无阻塞连接。我找到了一个包含一些代码的教程,并试图适应这种情况:

...
sockfd = socket(AF_INET, SOCK_STREAM, 0);
err = connect(sockfd,(struct sockaddr*)&sa,sizeof(sa));
...
SSL_set_fd(pssl,sockfd);
err = SSL_connect_nonb(pssl,sockfd,60);
if(err <=0 ){
    printf("SSL_connect:%s\n",ERR_error_string(SSL_get_error(pssl,err),NULL));
    return -1;
}
...
Run Code Online (Sandbox Code Playgroud)

SSL_connect_nonb函数定义如下:

int SSL_connect_nonb(SSL*pssl,int sockfd, int nsec)
{
    int flags, error;
    socklen_t len;
    fd_set rset, wset;
    struct timeval tval;
    flags = fcntl(sockfd, F_GETFL, 0);
    fcntl(sockfd, F_SETFL, flags | O_NONBLOCK);
    int err = SSL_connect(pssl);
    int err2 = SSL_get_error(pssl,err);
    switch(err2) {
            default:
                printf("SSL_connect err=%s\n",ERR_error_string(err2,0));
                return -1;
                break;
            case SSL_ERROR_WANT_READ:
            case SSL_ERROR_WANT_WRITE:
                break;
    }
    FD_ZERO(&rset);
    FD_ZERO(&wset);
    FD_SET(sockfd, &rset);
    FD_SET(sockfd, &wset); …
Run Code Online (Sandbox Code Playgroud)

ssl select openssl connect

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

标签 统计

connect ×1

openssl ×1

select ×1

ssl ×1