您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ socket_waitfd函数代码示例

51自学网 2021-06-03 08:06:26
  C++
这篇教程C++ socket_waitfd函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中socket_waitfd函数的典型用法代码示例。如果您正苦于以下问题:C++ socket_waitfd函数的具体用法?C++ socket_waitfd怎么用?C++ socket_waitfd使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了socket_waitfd函数的18个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: socket_send

/*-------------------------------------------------------------------------*/* Send with timeout* On windows, if you try to send 10MB, the OS will buffer EVERYTHING * this can take an awful lot of time and we will end up blocked. * Therefore, whoever calls this function should not pass a huge buffer./*-------------------------------------------------------------------------*/int socket_send(p_socket ps, const char *data, size_t count,         size_t *sent, p_timeout tm){    int err;    *sent = 0;    /* avoid making system calls on closed sockets */    if (*ps == SOCKET_INVALID) return IO_CLOSED;    /* loop until we send something or we give up on error */    for ( ;; ) {        /* try to send something */		int put = send(*ps, data, (int) count, 0);        /* if we sent something, we are done */        if (put > 0) {            *sent = put;            return IO_DONE;        }        /* deal with failure */        err = WSAGetLastError();         /* we can only proceed if there was no serious error */        if (err != WSAEWOULDBLOCK) return err;        /* avoid busy wait */        if ((err = socket_waitfd(ps, WAITFD_W, tm)) != IO_DONE) return err;    }     /* can't reach here */    return IO_UNKNOWN;}
开发者ID:leonlee,项目名称:tome,代码行数:32,


示例2: socket_connect

/*-------------------------------------------------------------------------*/* Connects or returns error message/*-------------------------------------------------------------------------*/int socket_connect(p_socket ps, SA *addr, socklen_t len, p_timeout tm) {    int err;    /* don't call on closed socket */    if (*ps == SOCKET_INVALID) return IO_CLOSED;    /* ask system to connect */    if (connect(*ps, addr, len) == 0) return IO_DONE;    /* make sure the system is trying to connect */    err = WSAGetLastError();    if (err != WSAEWOULDBLOCK && err != WSAEINPROGRESS) return err;    /* zero timeout case optimization */    if (timeout_iszero(tm)) return IO_TIMEOUT;    /* we wait until something happens */    err = socket_waitfd(ps, WAITFD_C, tm);    if (err == IO_CLOSED) {        int len = sizeof(err);        /* give windows time to set the error (yes, disgusting) */        Sleep(10);        /* find out why we failed */        getsockopt(*ps, SOL_SOCKET, SO_ERROR, (char *)&err, &len);         /* we KNOW there was an error. if 'why' is 0, we will return        * "unknown error", but it's not really our fault */        return err > 0? err: IO_UNKNOWN;     } else return err;}
开发者ID:15774211127,项目名称:AndroLua,代码行数:28,


示例3: socket_send

/*-------------------------------------------------------------------------*/* Send with timeout/*-------------------------------------------------------------------------*/int socket_send(p_socket ps, const char *data, size_t count,         size_t *sent, p_timeout tm){    int err;    *sent = 0;    /* avoid making system calls on closed sockets */    if (*ps == SOCKET_INVALID) return IO_CLOSED;    /* loop until we send something or we give up on error */    for ( ;; ) {        long put = (long) send(*ps, data, count, 0);        /* if we sent anything, we are done */        if (put > 0) {            *sent = put;            return IO_DONE;        }        err = peusock_errno;        /* send can't really return 0, but EPIPE means the connection was            closed */        if (put == 0 || err == peusock_EPIPE) return IO_CLOSED;        /* we call was interrupted, just try again */        if (err == peusock_EINTR) continue;        /* if failed fatal reason, report error */        if (err != peusock_EAGAIN) return err;        /* wait until we can send something or we timeout */        if ((err = socket_waitfd(ps, WAITFD_W, tm)) != IO_DONE) return err;    }    /* can't reach here */    return IO_UNKNOWN;}
开发者ID:AlexSincennes,项目名称:CSCI522A6,代码行数:32,


示例4: socket_recvfrom

/*-------------------------------------------------------------------------*/* Recvfrom with timeout/*-------------------------------------------------------------------------*/int socket_recvfrom(p_socket ps, char *data, size_t count, size_t *got,         SA *addr, socklen_t *len, p_timeout tm) {    int err, prev = IO_DONE;    *got = 0;    if (*ps == SOCKET_INVALID) return IO_CLOSED;    for ( ;; ) {        int taken = recvfrom(*ps, data, (int) count, 0, addr, len);        if (taken > 0) {            *got = taken;            return IO_DONE;        }        if (taken == 0) return IO_CLOSED;        err = WSAGetLastError();        /* On UDP, a connreset simply means the previous send failed.          * So we try again.          * On TCP, it means our socket is now useless, so the error passes.         * (We will loop again, exiting because the same error will happen) */        if (err != WSAEWOULDBLOCK) {            if (err != WSAECONNRESET || prev == WSAECONNRESET) return err;            prev = err;        }        if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;    }}
开发者ID:15774211127,项目名称:AndroLua,代码行数:28,


示例5: ssl_recv

/** * Receive data */static int ssl_recv(void *ctx, char *data, size_t count, size_t *got,  p_timeout tm){  int err;  p_ssl ssl = (p_ssl) ctx;  if (ssl->state == ST_SSL_CLOSED)    return IO_CLOSED;  *got = 0;  for ( ; ; ) {    ERR_clear_error();    err = SSL_read(ssl->ssl, data, (int) count);    ssl->error = SSL_get_error(ssl->ssl, err);    switch(ssl->error) {    case SSL_ERROR_NONE:      *got = err;      return IO_DONE;    case SSL_ERROR_ZERO_RETURN:      *got = err;      return IO_CLOSED;    case SSL_ERROR_WANT_READ:      err = socket_waitfd(&ssl->sock, WAITFD_R, tm);      if (err == IO_TIMEOUT) return IO_SSL;      if (err != IO_DONE)    return err;      break;    case SSL_ERROR_WANT_WRITE:      err = socket_waitfd(&ssl->sock, WAITFD_W, tm);      if (err == IO_TIMEOUT) return IO_SSL;      if (err != IO_DONE)    return err;      break;    case SSL_ERROR_SYSCALL:      if (ERR_peek_error())  {        ssl->error = SSL_ERROR_SSL;        return IO_SSL;      }      if (err == 0)        return IO_CLOSED;      return socket_error();    default:      return IO_SSL;    }  }  return IO_UNKNOWN;}
开发者ID:eddix,项目名称:luasec,代码行数:46,


示例6: ssl_send

/** * Send data */static int ssl_send(void *ctx, const char *data, size_t count, size_t *sent,   p_timeout tm){  int err;  p_ssl ssl = (p_ssl)ctx;  if (ssl->state != LSEC_STATE_CONNECTED)    return IO_CLOSED;  *sent = 0;  for ( ; ; ) {    ERR_clear_error();    err = SSL_write(ssl->ssl, data, (int)count);    ssl->error = SSL_get_error(ssl->ssl, err);    switch (ssl->error) {    case SSL_ERROR_NONE:      *sent = err;      return IO_DONE;    case SSL_ERROR_WANT_READ:       err = socket_waitfd(&ssl->sock, WAITFD_R, tm);      if (err == IO_TIMEOUT) return LSEC_IO_SSL;      if (err != IO_DONE)    return err;      break;    case SSL_ERROR_WANT_WRITE:      err = socket_waitfd(&ssl->sock, WAITFD_W, tm);      if (err == IO_TIMEOUT) return LSEC_IO_SSL;      if (err != IO_DONE)    return err;      break;    case SSL_ERROR_SYSCALL:      if (ERR_peek_error())  {        ssl->error = SSL_ERROR_SSL;        return LSEC_IO_SSL;      }      if (err == 0)        return IO_CLOSED;      return lsec_socket_error();    default:      return LSEC_IO_SSL;    }  }  return IO_UNKNOWN;}
开发者ID:horazont,项目名称:luasec,代码行数:43,


示例7: socket_accept

/*-------------------------------------------------------------------------*/* Accept with timeout/*-------------------------------------------------------------------------*/int socket_accept(p_socket ps, p_socket pa, SA *addr, socklen_t *len, p_timeout tm) {    if (*ps == SOCKET_INVALID) return IO_CLOSED;     for ( ;; ) {        int err;        if ((*pa = accept(*ps, addr, len)) != SOCKET_INVALID) return IO_DONE;        err = errno;        if (err == EINTR) continue;        if (err != EAGAIN && err != ECONNABORTED) return err;        if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;    }    /* can't reach here */    return IO_UNKNOWN;}
开发者ID:armatys,项目名称:luasocket,代码行数:16,


示例8: handshake

/** * Perform the TLS/SSL handshake */static int handshake(p_ssl ssl){  int err;  p_timeout tm = timeout_markstart(&ssl->tm);  if (ssl->state == ST_SSL_CLOSED)    return IO_CLOSED;  for ( ; ; ) {    ERR_clear_error();    err = SSL_do_handshake(ssl->ssl);    ssl->error = SSL_get_error(ssl->ssl, err);    switch(ssl->error) {    case SSL_ERROR_NONE:      ssl->state = ST_SSL_CONNECTED;      return IO_DONE;    case SSL_ERROR_WANT_READ:      err = socket_waitfd(&ssl->sock, WAITFD_R, tm);      if (err == IO_TIMEOUT) return IO_SSL;      if (err != IO_DONE)    return err;      break;    case SSL_ERROR_WANT_WRITE:      err = socket_waitfd(&ssl->sock, WAITFD_W, tm);      if (err == IO_TIMEOUT) return IO_SSL;      if (err != IO_DONE)    return err;      break;    case SSL_ERROR_SYSCALL:      if (ERR_peek_error())  {        ssl->error = SSL_ERROR_SSL;        return IO_SSL;      }      if (err == 0)        return IO_CLOSED;      return socket_error();    default:      return IO_SSL;    }  }  return IO_UNKNOWN;}
开发者ID:eddix,项目名称:luasec,代码行数:41,


示例9: socket_recv

int socket_recv(SOCKET socket, char *data, size_t count, int flags) {    int err;    for ( ;; ) {        int taken = recv(socket, data, (int) count, 0);        if (taken > 0) {			return taken;        }        if (taken == 0) return IO_CLOSED;        err = socket_errno;        if (err != SOCKET_EWOULDBLOCK) return -1;        if ((err = socket_waitfd(socket, WAITFD_R)) != IO_DONE) return -1;    }    return IO_UNKNOWN;}
开发者ID:dtiedy,项目名称:luaplus51-all,代码行数:14,


示例10: socket_accept

/*-------------------------------------------------------------------------*/* Accept with timeout/*-------------------------------------------------------------------------*/int socket_accept(p_socket ps, p_socket pa, SA *addr, socklen_t *len,         p_timeout tm) {    if (*ps == SOCKET_INVALID) return IO_CLOSED;    for ( ;; ) {        int err;        /* try to get client socket */        if ((*pa = accept(*ps, addr, len)) != SOCKET_INVALID) return IO_DONE;        /* find out why we failed */        err = WSAGetLastError();         /* if we failed because there was no connectoin, keep trying */        if (err != WSAEWOULDBLOCK && err != WSAECONNABORTED) return err;        /* call select to avoid busy wait */        if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;    } }
开发者ID:15774211127,项目名称:AndroLua,代码行数:18,


示例11: socket_recv

/*-------------------------------------------------------------------------*/* Receive with timeout/*-------------------------------------------------------------------------*/int socket_recv(p_socket ps, char *data, size_t count, size_t *got, p_timeout tm) {    int err;    *got = 0;    if (*ps == SOCKET_INVALID) return IO_CLOSED;    for ( ;; ) {        int taken = recv(*ps, data, (int) count, 0);        if (taken > 0) {            *got = taken;            return IO_DONE;        }        if (taken == 0) return IO_CLOSED;        err = WSAGetLastError();        if (err != WSAEWOULDBLOCK) return err;        if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;    }}
开发者ID:beniji,项目名称:luabuild,代码行数:19,


示例12: socket_sendto

/*-------------------------------------------------------------------------*/* Sendto with timeout/*-------------------------------------------------------------------------*/int socket_sendto(p_socket ps, const char *data, size_t count, size_t *sent,         SA *addr, socklen_t len, p_timeout tm){    int err;    *sent = 0;    if (*ps == SOCKET_INVALID) return IO_CLOSED;    for ( ;; ) {        int put = sendto(*ps, data, (int) count, 0, addr, len);        if (put > 0) {            *sent = put;            return IO_DONE;        }        err = WSAGetLastError();         if (err != WSAEWOULDBLOCK) return err;        if ((err = socket_waitfd(ps, WAITFD_W, tm)) != IO_DONE) return err;    } }
开发者ID:15774211127,项目名称:AndroLua,代码行数:20,


示例13: socket_connect

/*-------------------------------------------------------------------------*/* Connects or returns error message/*-------------------------------------------------------------------------*/int socket_connect(p_socket ps, SA *addr, socklen_t len, p_timeout tm) {    int err;    /* avoid calling on closed sockets */    if (*ps == SOCKET_INVALID) return IO_CLOSED;    /* call connect until done or failed without being interrupted */    do if (connect(*ps, addr, len) == 0) return IO_DONE;    while ((err = peusock_errno) == peusock_EINTR);    /* if connection failed immediately, return error code */    if (err != peusock_EINPROGRESS && err != peusock_EAGAIN) return err;     /* zero timeout case optimization */    if (timeout_iszero(tm)) return IO_TIMEOUT;    /* wait until we have the result of the connection attempt or timeout */    err = socket_waitfd(ps, WAITFD_C, tm);    if (err == IO_CLOSED) {        if (recv(*ps, (char *) &err, 0, 0) == 0) return IO_DONE;        else return peusock_errno;    } else return err;}
开发者ID:AlexSincennes,项目名称:CSCI522A6,代码行数:21,


示例14: socket_recv

/*-------------------------------------------------------------------------*/* Receive with timeout/*-------------------------------------------------------------------------*/int socket_recv(p_socket ps, char *data, size_t count, size_t *got, int flags, p_timeout tm) {    int err;    *got = 0;    if (*ps == SOCKET_INVALID) return IO_CLOSED;    for ( ;; ) {        long taken = (long) recv(*ps, data, count, flags);        if (taken > 0) {            *got = taken;            return IO_DONE;        }        err = errno;        if (taken == 0) return IO_CLOSED;        if (err == EINTR) continue;        if (err != EAGAIN) return err;         if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;     }    return IO_UNKNOWN;}
开发者ID:SkYNOcean,项目名称:sacd-ripper,代码行数:21,


示例15: socket_recvfrom

/*-------------------------------------------------------------------------*/* Recvfrom with timeout/*-------------------------------------------------------------------------*/int socket_recvfrom(p_socket ps, char *data, size_t count, size_t *got,         SA *addr, socklen_t *len, p_timeout tm) {    int err;    *got = 0;    if (*ps == SOCKET_INVALID) return IO_CLOSED;    for ( ;; ) {        long taken = (long) recvfrom(*ps, data, count, 0, addr, len);        if (taken > 0) {            *got = taken;            return IO_DONE;        }        err = peusock_errno;        if (taken == 0) return IO_CLOSED;        if (err == peusock_EINTR) continue;        if (err != peusock_EAGAIN) return err;         if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;     }    return IO_UNKNOWN;}
开发者ID:AlexSincennes,项目名称:CSCI522A6,代码行数:22,


示例16: socket_sendto

/*-------------------------------------------------------------------------*/* Sendto with timeout/*-------------------------------------------------------------------------*/int socket_sendto(p_socket ps, const char *data, size_t count, size_t *sent,         SA *addr, socklen_t len, p_timeout tm){    int err;    *sent = 0;    if (*ps == SOCKET_INVALID) return IO_CLOSED;    for ( ;; ) {        long put = (long) sendto(*ps, data, count, 0, addr, len);          if (put > 0) {            *sent = put;            return IO_DONE;        }        err = peusock_errno;        if (put == 0 || err == peusock_EPIPE) return IO_CLOSED;        if (err == peusock_EINTR) continue;        if (err != peusock_EAGAIN) return err;        if ((err = socket_waitfd(ps, WAITFD_W, tm)) != IO_DONE) return err;    }    return IO_UNKNOWN;}
开发者ID:AlexSincennes,项目名称:CSCI522A6,代码行数:23,


示例17: socket_send

int socket_send(SOCKET socket, const char *data, size_t count, int flags){    int err;    /* loop until we send something or we give up on error */    for ( ;; ) {        /* try to send something */		int put = send(socket, data, (int) count, 0);        /* if we sent something, we are done */        if (put > 0) {			return put;        }        /* deal with failure */        err = socket_errno;        /* we can only proceed if there was no serious error */        if (err != SOCKET_EWOULDBLOCK) return -1;        /* avoid busy wait */        if ((err = socket_waitfd(socket, WAITFD_W)) != IO_DONE) return -1;    }     /* can't reach here */    return IO_UNKNOWN;}
开发者ID:dtiedy,项目名称:luaplus51-all,代码行数:21,


示例18: socket_accept

/*-------------------------------------------------------------------------*/* Accept with timeout/*-------------------------------------------------------------------------*/int socket_accept(p_socket ps, p_socket pa, SA *addr, socklen_t *len, p_timeout tm) {    SA daddr;    socklen_t dlen = sizeof(daddr);    if (*ps == SOCKET_INVALID) return IO_CLOSED;     if (!addr) addr = &daddr;    if (!len) len = &dlen;    for ( ;; ) {        int err;        if ((*pa = peusock_accept(*ps, addr, len)) >= 0)		{			printf("LuaSocket(C++ core): socket_accept(): accept succeeded/n");			return IO_DONE;		}        err = peusock_errno;        if (err == peusock_EINTR) continue;        if (err != peusock_EAGAIN && err != peusock_ECONNABORTED) return err;         		if ((err = socket_waitfd(ps, WAITFD_R, tm)) != IO_DONE) return err;    }    /* can't reach here */    return IO_UNKNOWN;}
开发者ID:AlexSincennes,项目名称:CSCI522A6,代码行数:26,



注:本文中的socket_waitfd函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ socket_write函数代码示例
C++ socket_wait函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。