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

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

51自学网 2021-06-01 20:16:21
  C++
这篇教程C++ Curl_write函数代码示例写得很实用,希望能帮到您。

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

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

示例1: Curl_pp_flushsend

CURLcode Curl_pp_flushsend(struct pingpong *pp){  /* we have a piece of a command still left to send */  struct connectdata *conn = pp->conn;  ssize_t written;  CURLcode result = CURLE_OK;  curl_socket_t sock = conn->sock[FIRSTSOCKET];  result = Curl_write(conn, sock, pp->sendthis + pp->sendsize -                      pp->sendleft, pp->sendleft, &written);  if(result)    return result;  if(written != (ssize_t)pp->sendleft) {    /* only a fraction was sent */    pp->sendleft -= written;  }  else {    free(pp->sendthis);    pp->sendthis=NULL;    pp->sendleft = pp->sendsize = 0;    pp->response = Curl_tvnow();  }  return CURLE_OK;}
开发者ID:bagobor,项目名称:vs-curl-test,代码行数:25,


示例2: curl_easy_send

/* * Sends data over the connected socket. Use after successful * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. */CURLcode curl_easy_send(CURL *curl, const void *buffer, size_t buflen,                        size_t *n){  curl_socket_t sfd;  CURLcode ret;  ssize_t n1;  struct connectdata *c = NULL;  struct SessionHandle *data = (struct SessionHandle *)curl;  ret = easy_connection(data, &sfd, &c);  if(ret)    return ret;  *n = 0;  ret = Curl_write(c, sfd, buffer, buflen, &n1);  if(n1 == -1)    return CURLE_SEND_ERROR;  /* detect EAGAIN */  if((CURLE_OK == ret) && (0 == n1))    return CURLE_AGAIN;  *n = (size_t)n1;  return ret;}
开发者ID:bagobor,项目名称:vs-curl-test,代码行数:31,


示例3: curl_easy_send

/* * Sends data over the connected socket. Use after successful * curl_easy_perform() with CURLOPT_CONNECT_ONLY option. */CURLcode curl_easy_send(struct Curl_easy *data, const void *buffer,                        size_t buflen, size_t *n){  curl_socket_t sfd;  CURLcode result;  ssize_t n1;  struct connectdata *c = NULL;  result = easy_connection(data, &sfd, &c);  if(result)    return result;  *n = 0;  result = Curl_write(c, sfd, buffer, buflen, &n1);  if(n1 == -1)    return CURLE_SEND_ERROR;  /* detect EAGAIN */  if(!result && !n1)    return CURLE_AGAIN;  *n = (size_t)n1;  return result;}
开发者ID:robertop,项目名称:curl,代码行数:30,


示例4: send_telnet_data

/* Escape and send a telnet data block */static CURLcode send_telnet_data(struct connectdata *conn,                                 char *buffer, ssize_t nread){  ssize_t escapes, i, j, outlen;  unsigned char *outbuf = NULL;  CURLcode result = CURLE_OK;  ssize_t bytes_written, total_written;  /* Determine size of new buffer after escaping */  escapes = 0;  for(i = 0; i < nread; i++)    if((unsigned char)buffer[i] == CURL_IAC)      escapes++;  outlen = nread + escapes;  if(outlen == nread)    outbuf = (unsigned char *)buffer;  else {    outbuf = malloc(nread + escapes + 1);    if(!outbuf)      return CURLE_OUT_OF_MEMORY;    j = 0;    for(i = 0; i < nread; i++) {      outbuf[j++] = buffer[i];      if((unsigned char)buffer[i] == CURL_IAC)        outbuf[j++] = CURL_IAC;    }    outbuf[j] = '/0';  }  total_written = 0;  while(!result && total_written < outlen) {    /* Make sure socket is writable to avoid EWOULDBLOCK condition */    struct pollfd pfd[1];    pfd[0].fd = conn->sock[FIRSTSOCKET];    pfd[0].events = POLLOUT;    switch(Curl_poll(pfd, 1, -1)) {      case -1:                    /* error, abort writing */      case 0:                     /* timeout (will never happen) */        result = CURLE_SEND_ERROR;        break;      default:                    /* write! */        bytes_written = 0;        result = Curl_write(conn, conn->sock[FIRSTSOCKET],                            outbuf + total_written,                            outlen - total_written,                            &bytes_written);        total_written += bytes_written;        break;    }  }  /* Free malloc copy if escaped */  if(outbuf != (unsigned char *)buffer)    free(outbuf);  return result;}
开发者ID:ETrun,项目名称:curl,代码行数:60,


示例5: smtp_done

/*********************************************************************** * * smtp_done() * * The DONE function. This does what needs to be done after a single DO has * performed. * * Input argument is already checked for validity. */static CURLcode smtp_done(struct connectdata *conn, CURLcode status,                          bool premature){  struct SessionHandle *data = conn->data;  struct FTP *smtp = data->state.proto.smtp;  CURLcode result = CURLE_OK;  ssize_t bytes_written;  (void)premature;  if(!smtp)    /* When the easy handle is removed from the multi while libcurl is still     * trying to resolve the host name, it seems that the smtp struct is not     * yet initialized, but the removal action calls Curl_done() which calls     * this function. So we simply return success if no smtp pointer is set.     */    return CURLE_OK;  if(status) {    conn->bits.close = TRUE; /* marked for closure */    result = status;      /* use the already set error code */  }  else    /* TODO: make this work even when the socket is EWOULDBLOCK in this       call! */    /* write to socket (send away data) */    result = Curl_write(conn,                        conn->writesockfd,  /* socket to send to */                        SMTP_EOB,           /* buffer pointer */                        SMTP_EOB_LEN,       /* buffer size */                        &bytes_written);    /* actually sent away */  if(status == CURLE_OK) {    struct smtp_conn *smtpc = &conn->proto.smtpc;    struct pingpong *pp = &smtpc->pp;    pp->response = Curl_tvnow(); /* timeout relative now */    state(conn, SMTP_POSTDATA);    /* run the state-machine       TODO: when the multi interface is used, this _really_ should be using       the smtp_multi_statemach function but we have no general support for       non-blocking DONE operations, not in the multi state machine and with       Curl_done() invokes on several places in the code!    */    result = smtp_easy_statemach(conn);  }  /* clear these for next connection */  smtp->transfer = FTPTRANSFER_BODY;  return result;}
开发者ID:bhalder,项目名称:Optimized-Webserver,代码行数:63,


示例6: Curl_sendf

/* Curl_sendf() sends formated data to the server */CURLcode Curl_sendf(curl_socket_t sockfd, struct connectdata *conn,                    const char *fmt, ...){    struct SessionHandle *data = conn->data;    ssize_t bytes_written;    size_t write_len;    CURLcode res;    char *s;    char *sptr;    va_list ap;    va_start(ap, fmt);    s = vaprintf(fmt, ap); /* returns an allocated string */    va_end(ap);    if(!s)        return CURLE_OUT_OF_MEMORY; /* failure */    bytes_written=0;    write_len = strlen(s);    sptr = s;    while (1)    {        /* Write the buffer to the socket */        res = Curl_write(conn, sockfd, sptr, write_len, &bytes_written);        if(CURLE_OK != res)            break;        if(data->set.verbose)            Curl_debug(data, CURLINFO_DATA_OUT, sptr, bytes_written);        if((size_t)bytes_written != write_len)        {            /* if not all was written at once, we must advance the pointer, decrease               the size left and try again! */            write_len -= bytes_written;            sptr += bytes_written;        }        else            break;    }    free(s); /* free the output string */    return res;}
开发者ID:revelator,项目名称:Revelator-Doom3,代码行数:47,


示例7: add_buffer_send

/* * add_buffer_send() sends a buffer and frees all associated memory. */staticCURLcode add_buffer_send(int sockfd, struct connectdata *conn, send_buffer *in,                         long *bytes_written){  ssize_t amount;  CURLcode res;  char *ptr;  int size;  if(conn->data->set.verbose) {    fputs("> ", conn->data->set.err);    /* this data _may_ contain binary stuff */    fwrite(in->buffer, in->size_used, 1, conn->data->set.err);  }  /* The looping below is required since we use non-blocking sockets, but due     to the circumstances we will just loop and try again and again etc */  ptr = in->buffer;  size = in->size_used;  do {    res = Curl_write(conn, sockfd, ptr, size, &amount);    if(CURLE_OK != res)      break;    if(amount != size) {      size -= amount;      ptr += amount;    }    else      break;  } while(1);  if(in->buffer)    free(in->buffer);  free(in);  *bytes_written = amount;  return res;}
开发者ID:BackupTheBerlios,项目名称:texlive,代码行数:46,


示例8: send_callback

/* * The implementation of nghttp2_send_callback type. Here we write |data| with * size |length| to the network and return the number of bytes actually * written. See the documentation of nghttp2_send_callback for the details. */static ssize_t send_callback(nghttp2_session *h2,                             const uint8_t *data, size_t length, int flags,                             void *userp){  struct connectdata *conn = (struct connectdata *)userp;  ssize_t written;  CURLcode rc =    Curl_write(conn, conn->sock[FIRSTSOCKET], data, length, &written);  (void)h2;  (void)flags;  if(rc) {    failf(conn->data, "Failed sending HTTP2 data");    return NGHTTP2_ERR_CALLBACK_FAILURE;  }  else if(!written)    return NGHTTP2_ERR_WOULDBLOCK;  return written;}
开发者ID:ConfusedReality,项目名称:pkg_network_curl,代码行数:25,


示例9: send_telnet_data

/* TODO: write large chunks of data instead of one byte at a time */static CURLcode send_telnet_data(struct connectdata *conn,                                 char *buffer, ssize_t nread){  unsigned char outbuf[2];  ssize_t bytes_written, total_written;  int out_count;  CURLcode result = CURLE_OK;  while(!result && nread--) {    outbuf[0] = *buffer++;    out_count = 1;    if(outbuf[0] == CURL_IAC)      outbuf[out_count++] = CURL_IAC;    total_written = 0;    do {      /* Make sure socket is writable to avoid EWOULDBLOCK condition */      struct pollfd pfd[1];      pfd[0].fd = conn->sock[FIRSTSOCKET];      pfd[0].events = POLLOUT;      switch (Curl_poll(pfd, 1, -1)) {        case -1:                    /* error, abort writing */        case 0:                     /* timeout (will never happen) */          result = CURLE_SEND_ERROR;          break;        default:                    /* write! */          bytes_written = 0;          result = Curl_write(conn, conn->sock[FIRSTSOCKET],                              outbuf+total_written, out_count-total_written,                              &bytes_written);          total_written += bytes_written;          break;      }      /* handle partial write */    } while(!result && total_written < out_count);  }  return result;}
开发者ID:AndyUI,项目名称:curl,代码行数:39,


示例10: smtp_done

/*********************************************************************** * * smtp_done() * * The DONE function. This does what needs to be done after a single DO has * performed. * * Input argument is already checked for validity. */static CURLcode smtp_done(struct connectdata *conn, CURLcode status,                          bool premature){  struct SessionHandle *data = conn->data;  struct FTP *smtp = data->state.proto.smtp;  CURLcode result=CURLE_OK;  ssize_t bytes_written;  (void)premature;  if(!smtp)    /* When the easy handle is removed from the multi while libcurl is still     * trying to resolve the host name, it seems that the smtp struct is not     * yet initialized, but the removal action calls Curl_done() which calls     * this function. So we simply return success if no smtp pointer is set.     */    return CURLE_OK;  if(status) {    conn->bits.close = TRUE; /* marked for closure */    result = status;      /* use the already set error code */  }  else    /* TODO: make this work even when the socket is EWOULDBLOCK in this call! */    /* write to socket (send away data) */    result = Curl_write(conn,                        conn->writesockfd,  /* socket to send to */                        SMTP_EOB,           /* buffer pointer */                        SMTP_EOB_LEN,       /* buffer size */                        &bytes_written);    /* actually sent away */  /* clear these for next connection */  smtp->transfer = FTPTRANSFER_BODY;  return result;}
开发者ID:bagobor,项目名称:vs-curl-test,代码行数:45,


示例11: smtp_done

/*********************************************************************** * * smtp_done() * * The DONE function. This does what needs to be done after a single DO has * performed. * * Input argument is already checked for validity. */static CURLcode smtp_done(struct connectdata *conn, CURLcode status,                          bool premature){  CURLcode result = CURLE_OK;  struct Curl_easy *data = conn->data;  struct SMTP *smtp = data->req.protop;  struct pingpong *pp = &conn->proto.smtpc.pp;  char *eob;  ssize_t len;  ssize_t bytes_written;  (void)premature;  if(!smtp || !pp->conn)    return CURLE_OK;  /* Cleanup our per-request based variables */  Curl_safefree(smtp->custom);  if(status) {    connclose(conn, "SMTP done with bad status"); /* marked for closure */    result = status;         /* use the already set error code */  }  else if(!data->set.connect_only && data->set.mail_rcpt &&          (data->set.upload || data->set.mimepost.kind)) {    /* Calculate the EOB taking into account any terminating CRLF from the       previous line of the email or the CRLF of the DATA command when there       is "no mail data". RFC-5321, sect. 4.1.1.4.       Note: As some SSL backends, such as OpenSSL, will cause Curl_write() to       fail when using a different pointer following a previous write, that       returned CURLE_AGAIN, we duplicate the EOB now rather than when the       bytes written doesn't equal len. */    if(smtp->trailing_crlf || !conn->data->state.infilesize) {      eob = strdup(SMTP_EOB + 2);      len = SMTP_EOB_LEN - 2;    }    else {      eob = strdup(SMTP_EOB);      len = SMTP_EOB_LEN;    }    if(!eob)      return CURLE_OUT_OF_MEMORY;    /* Send the end of block data */    result = Curl_write(conn, conn->writesockfd, eob, len, &bytes_written);    if(result) {      free(eob);      return result;    }    if(bytes_written != len) {      /* The whole chunk was not sent so keep it around and adjust the         pingpong structure accordingly */      pp->sendthis = eob;      pp->sendsize = len;      pp->sendleft = len - bytes_written;    }    else {      /* Successfully sent so adjust the response timeout relative to now */      pp->response = Curl_now();      free(eob);    }    state(conn, SMTP_POSTDATA);    /* Run the state-machine       TODO: when the multi interface is used, this _really_ should be using       the smtp_multi_statemach function but we have no general support for       non-blocking DONE operations!    */    result = smtp_block_statemach(conn);  }  /* Clear the transfer mode for the next request */  smtp->transfer = FTPTRANSFER_BODY;  return result;}
开发者ID:vszakats,项目名称:curl,代码行数:91,


示例12: Curl_SOCKS4

//.........这里部分代码省略.........        socksreq[6] = (unsigned char)ip[2];        socksreq[7] = (unsigned char)ip[3];      }      else        hp = NULL; /* fail! */      Curl_resolv_unlock(data, dns); /* not used anymore from now on */    }    if(!hp) {      failf(data, "Failed to resolve /"%s/" for SOCKS4 connect.",            conn->host.name);      return CURLE_COULDNT_RESOLVE_HOST;    }  }  /*   * This is currently not supporting "Identification Protocol (RFC1413)".   */  socksreq[8] = 0; /* ensure empty userid is NUL-terminated */  if (proxy_name)    strlcat((char*)socksreq + 8, proxy_name, sizeof(socksreq) - 8);  /*   * Make connection   */  {    ssize_t actualread;    ssize_t written;    int packetsize = 9 +      (int)strlen((char*)socksreq + 8); /* size including NUL */    /* Send request */    code = Curl_write(conn, sock, (char *)socksreq, packetsize, &written);    if ((code != CURLE_OK) || (written != packetsize)) {      failf(data, "Failed to send SOCKS4 connect request.");      return CURLE_COULDNT_CONNECT;    }    packetsize = 8; /* receive data size */    /* Receive response */    result = blockread_all(conn, sock, (char *)socksreq, packetsize,                           &actualread, timeout);    if ((result != CURLE_OK) || (actualread != packetsize)) {      failf(data, "Failed to receive SOCKS4 connect request ack.");      return CURLE_COULDNT_CONNECT;    }    /*     * Response format     *     *     +----+----+----+----+----+----+----+----+     *     | VN | CD | DSTPORT |      DSTIP        |     *     +----+----+----+----+----+----+----+----+     * # of bytes:  1    1      2              4     *     * VN is the version of the reply code and should be 0. CD is the result     * code with one of the following values:     *     * 90: request granted     * 91: request rejected or failed     * 92: request rejected because SOCKS server cannot connect to     *     identd on the client     * 93: request rejected because the client program and identd     *     report different user-ids
开发者ID:Multi2Sim,项目名称:m2s-bench-parsec-3.0-src,代码行数:67,


示例13: Curl_telnet

//.........这里部分代码省略.........  objs[1] = event_handle;  /* Tell winsock what events we want to listen to */  if(event_select_func(sockfd, event_handle, FD_READ|FD_CLOSE) == SOCKET_ERROR) {    close_event_func(event_handle);    FreeLibrary(wsock2);    return 0;  }  /* Keep on listening and act on events */  while(keepon) {    waitret = WaitForMultipleObjects(2, objs, FALSE, INFINITE);    switch(waitret - WAIT_OBJECT_0) {    case 0:    {      unsigned char outbuf[2];      int out_count = 0;      ssize_t bytes_written;      char *buffer = buf;                    if(!ReadFile(stdin_handle, buf, sizeof(data->state.buffer),                   &readfile_read, NULL)) {        keepon = FALSE;        break;      }      nread = readfile_read;              while(nread--) {        outbuf[0] = *buffer++;        out_count = 1;        if(outbuf[0] == CURL_IAC)          outbuf[out_count++] = CURL_IAC;                  Curl_write(conn, conn->sock[FIRSTSOCKET], outbuf,                   out_count, &bytes_written);      }    }    break;          case 1:      if(enum_netevents_func(sockfd, event_handle, &events)         != SOCKET_ERROR) {        if(events.lNetworkEvents & FD_READ) {          /* This reallu OUGHT to check its return code. */          (void)Curl_read(conn, sockfd, buf, BUFSIZE - 1, &nread);                      telrcv(conn, (unsigned char *)buf, nread);                    fflush(stdout);                      /* Negotiate if the peer has started negotiating,             otherwise don't. We don't want to speak telnet with             non-telnet servers, like POP or SMTP. */          if(tn->please_negotiate && !tn->already_negotiated) {            negotiate(conn);            tn->already_negotiated = 1;          }        }                  if(events.lNetworkEvents & FD_CLOSE) {          keepon = FALSE;        }      }      break;    }  }
开发者ID:Nekel-Seyew,项目名称:niTech4,代码行数:67,


示例14: Curl_SOCKS5

/* * This function logs in to a SOCKS5 proxy and sends the specifics to the final * destination server. */CURLcode Curl_SOCKS5(const char *proxy_name,                     const char *proxy_password,                     struct connectdata *conn){  /*    According to the RFC1928, section "6.  Replies". This is what a SOCK5    replies:        +----+-----+-------+------+----------+----------+        |VER | REP |  RSV  | ATYP | BND.ADDR | BND.PORT |        +----+-----+-------+------+----------+----------+        | 1  |  1  | X'00' |  1   | Variable |    2     |        +----+-----+-------+------+----------+----------+    Where:    o  VER    protocol version: X'05'    o  REP    Reply field:    o  X'00' succeeded  */  unsigned char socksreq[600]; /* room for large user/pw (255 max each) */  ssize_t actualread;  ssize_t written;  int result;  CURLcode code;  curl_socket_t sock = conn->sock[FIRSTSOCKET];  struct SessionHandle *data = conn->data;  long timeout;  /* get timeout */  if(data->set.timeout && data->set.connecttimeout) {    if (data->set.timeout < data->set.connecttimeout)      timeout = data->set.timeout*1000;    else      timeout = data->set.connecttimeout*1000;  }  else if(data->set.timeout)    timeout = data->set.timeout*1000;  else if(data->set.connecttimeout)    timeout = data->set.connecttimeout*1000;  else    timeout = DEFAULT_CONNECT_TIMEOUT;  Curl_nonblock(sock, TRUE);  /* wait until socket gets connected */  result = Curl_select(CURL_SOCKET_BAD, sock, (int)timeout);  if(-1 == result) {    failf(conn->data, "SOCKS5: no connection here");    return CURLE_COULDNT_CONNECT;  }  else if(0 == result) {    failf(conn->data, "SOCKS5: connection timeout");    return CURLE_OPERATION_TIMEDOUT;  }  if(result & CSELECT_ERR) {    failf(conn->data, "SOCKS5: error occured during connection");    return CURLE_COULDNT_CONNECT;  }  socksreq[0] = 5; /* version */  socksreq[1] = (char)(proxy_name ? 2 : 1); /* number of methods (below) */  socksreq[2] = 0; /* no authentication */  socksreq[3] = 2; /* username/password */  Curl_nonblock(sock, FALSE);  code = Curl_write(conn, sock, (char *)socksreq, (2 + (int)socksreq[1]),                      &written);  if ((code != CURLE_OK) || (written != (2 + (int)socksreq[1]))) {    failf(data, "Unable to send initial SOCKS5 request.");    return CURLE_COULDNT_CONNECT;  }  Curl_nonblock(sock, TRUE);  result = Curl_select(sock, CURL_SOCKET_BAD, (int)timeout);  if(-1 == result) {    failf(conn->data, "SOCKS5 nothing to read");    return CURLE_COULDNT_CONNECT;  }  else if(0 == result) {    failf(conn->data, "SOCKS5 read timeout");    return CURLE_OPERATION_TIMEDOUT;  }  if(result & CSELECT_ERR) {    failf(conn->data, "SOCKS5 read error occured");    return CURLE_RECV_ERROR;  }  Curl_nonblock(sock, FALSE);//.........这里部分代码省略.........
开发者ID:Multi2Sim,项目名称:m2s-bench-parsec-3.0-src,代码行数:101,


示例15: Curl_pp_vsendf

/*********************************************************************** * * Curl_pp_sendfv() * * Send the formated string as a command to a pingpong server. Note that * the string should not have any CRLF appended, as this function will * append the necessary things itself. * * NOTE: we build the command in a fixed-length buffer, which sets length * restrictions on the command! * * made to never block */CURLcode Curl_pp_vsendf(struct pingpong *pp,                        const char *fmt,                        va_list args){  ssize_t bytes_written;/* may still not be big enough for some krb5 tokens */#define SBUF_SIZE 1024  char s[SBUF_SIZE];  size_t write_len;  char *sptr=s;  CURLcode res = CURLE_OK;  struct connectdata *conn = pp->conn;  struct SessionHandle *data = conn->data;#if defined(HAVE_KRB4) || defined(HAVE_GSSAPI)  enum protection_level data_sec = conn->data_prot;#endif  vsnprintf(s, SBUF_SIZE-3, fmt, args);  strcat(s, "/r/n"); /* append a trailing CRLF */  bytes_written=0;  write_len = strlen(s);  Curl_pp_init(pp);#ifdef CURL_DOES_CONVERSIONS  res = Curl_convert_to_network(data, s, write_len);  /* Curl_convert_to_network calls failf if unsuccessful */  if(res != CURLE_OK) {    return res;  }#endif /* CURL_DOES_CONVERSIONS */#if defined(HAVE_KRB4) || defined(HAVE_GSSAPI)  conn->data_prot = prot_cmd;#endif  res = Curl_write(conn, conn->sock[FIRSTSOCKET], sptr, write_len,                   &bytes_written);#if defined(HAVE_KRB4) || defined(HAVE_GSSAPI)  conn->data_prot = data_sec;#endif  if(CURLE_OK != res)    return res;  if(conn->data->set.verbose)    Curl_debug(conn->data, CURLINFO_HEADER_OUT,               sptr, (size_t)bytes_written, conn);  if(bytes_written != (ssize_t)write_len) {    /* the whole chunk was not sent, store the rest of the data */    write_len -= bytes_written;    sptr += bytes_written;    pp->sendthis = malloc(write_len);    if(pp->sendthis) {      memcpy(pp->sendthis, sptr, write_len);      pp->sendsize = pp->sendleft = write_len;    }    else {      failf(data, "out of memory");      res = CURLE_OUT_OF_MEMORY;    }  }  else    pp->response = Curl_tvnow();  return res;}
开发者ID:bagobor,项目名称:vs-curl-test,代码行数:83,


示例16: smtp_done

/*********************************************************************** * * smtp_done() * * The DONE function. This does what needs to be done after a single DO has * performed. * * Input argument is already checked for validity. */static CURLcode smtp_done(struct connectdata *conn, CURLcode status,                          bool premature){  struct SessionHandle *data = conn->data;  struct FTP *smtp = data->state.proto.smtp;  CURLcode result = CURLE_OK;  ssize_t bytes_written;  (void)premature;  if(!smtp)    /* When the easy handle is removed from the multi while libcurl is still     * trying to resolve the host name, it seems that the smtp struct is not     * yet initialized, but the removal action calls Curl_done() which calls     * this function. So we simply return success if no smtp pointer is set.     */    return CURLE_OK;  if(status) {    conn->bits.close = TRUE; /* marked for closure */    result = status;         /* use the already set error code */  }  else if(!data->set.connect_only) {    struct smtp_conn *smtpc = &conn->proto.smtpc;    struct pingpong *pp = &smtpc->pp;    /* Send the end of block data */    result = Curl_write(conn,                        conn->writesockfd,  /* socket to send to */                        SMTP_EOB,           /* buffer pointer */                        SMTP_EOB_LEN,       /* buffer size */                        &bytes_written);    /* actually sent away */    if(result)      return result;    if(bytes_written != SMTP_EOB_LEN) {      /* The whole chunk was not sent so keep it around and adjust the         pingpong structure accordingly */      pp->sendthis = strdup(SMTP_EOB);      pp->sendsize = SMTP_EOB_LEN;      pp->sendleft = SMTP_EOB_LEN - bytes_written;    }    else      /* Successfully sent so adjust the response timeout relative to now */      pp->response = Curl_tvnow();    state(conn, SMTP_POSTDATA);    /* Run the state-machine       TODO: when the multi interface is used, this _really_ should be using       the smtp_multi_statemach function but we have no general support for       non-blocking DONE operations, not in the multi state machine and with       Curl_done() invokes on several places in the code!    */    result = smtp_easy_statemach(conn);  }  /* Clear the transfer mode for the next connection */  smtp->transfer = FTPTRANSFER_BODY;  return result;}
开发者ID:sohailsomani,项目名称:curl,代码行数:73,


示例17: Curl_telnet

//.........这里部分代码省略.........  while(keepon) {    waitret = WaitForMultipleObjects(obj_count, objs, FALSE, wait_timeout);    switch(waitret) {    case WAIT_TIMEOUT:    {      unsigned char outbuf[2];      int out_count = 0;      ssize_t bytes_written;      char *buffer = buf;      while(1) {        if(!PeekNamedPipe(stdin_handle, NULL, 0, NULL, &readfile_read, NULL)) {          keepon = FALSE;          break;        }        nread = readfile_read;        if(!nread)          break;        if(!ReadFile(stdin_handle, buf, sizeof(data->state.buffer),                     &readfile_read, NULL)) {          keepon = FALSE;          break;        }        nread = readfile_read;        while(nread--) {          outbuf[0] = *buffer++;          out_count = 1;          if(outbuf[0] == CURL_IAC)            outbuf[out_count++] = CURL_IAC;          Curl_write(conn, conn->sock[FIRSTSOCKET], outbuf,                     out_count, &bytes_written);        }      }    }    break;    case WAIT_OBJECT_0 + 1:    {      unsigned char outbuf[2];      int out_count = 0;      ssize_t bytes_written;      char *buffer = buf;      if(!ReadFile(stdin_handle, buf, sizeof(data->state.buffer),                   &readfile_read, NULL)) {        keepon = FALSE;        break;      }      nread = readfile_read;      while(nread--) {        outbuf[0] = *buffer++;        out_count = 1;        if(outbuf[0] == CURL_IAC)          outbuf[out_count++] = CURL_IAC;        Curl_write(conn, conn->sock[FIRSTSOCKET], outbuf,                   out_count, &bytes_written);      }    }    break;
开发者ID:irmametra,项目名称:EiffelStudio,代码行数:66,


示例18: Curl_pp_vsendf

/*********************************************************************** * * Curl_pp_vsendf() * * Send the formatted string as a command to a pingpong server. Note that * the string should not have any CRLF appended, as this function will * append the necessary things itself. * * made to never block */CURLcode Curl_pp_vsendf(struct pingpong *pp,                        const char *fmt,                        va_list args){  ssize_t bytes_written;  size_t write_len;  char *fmt_crlf;  char *s;  CURLcode result;  struct connectdata *conn = pp->conn;  struct Curl_easy *data;#ifdef HAVE_GSSAPI  enum protection_level data_sec;#endif  DEBUGASSERT(pp->sendleft == 0);  DEBUGASSERT(pp->sendsize == 0);  DEBUGASSERT(pp->sendthis == NULL);  if(!conn)    /* can't send without a connection! */    return CURLE_SEND_ERROR;  data = conn->data;  fmt_crlf = aprintf("%s/r/n", fmt); /* append a trailing CRLF */  if(!fmt_crlf)    return CURLE_OUT_OF_MEMORY;  s = vaprintf(fmt_crlf, args); /* trailing CRLF appended */  free(fmt_crlf);  if(!s)    return CURLE_OUT_OF_MEMORY;  bytes_written = 0;  write_len = strlen(s);  Curl_pp_init(pp);  result = Curl_convert_to_network(data, s, write_len);  /* Curl_convert_to_network calls failf if unsuccessful */  if(result) {    free(s);    return result;  }#ifdef HAVE_GSSAPI  conn->data_prot = PROT_CMD;#endif  result = Curl_write(conn, conn->sock[FIRSTSOCKET], s, write_len,                     &bytes_written);#ifdef HAVE_GSSAPI  data_sec = conn->data_prot;  DEBUGASSERT(data_sec > PROT_NONE && data_sec < PROT_LAST);  conn->data_prot = data_sec;#endif  if(result) {    free(s);    return result;  }  if(conn->data->set.verbose)    Curl_debug(conn->data, CURLINFO_HEADER_OUT,               s, (size_t)bytes_written, conn);  if(bytes_written != (ssize_t)write_len) {    /* the whole chunk was not sent, keep it around and adjust sizes */    pp->sendthis = s;    pp->sendsize = write_len;    pp->sendleft = write_len - bytes_written;  }  else {    free(s);    pp->sendthis = NULL;    pp->sendleft = pp->sendsize = 0;    pp->response = Curl_now();  }  return CURLE_OK;}
开发者ID:ETrun,项目名称:curl,代码行数:92,


示例19: gopher_do

static CURLcode gopher_do(struct connectdata *conn, bool *done){  CURLcode result=CURLE_OK;  struct SessionHandle *data=conn->data;  curl_socket_t sockfd = conn->sock[FIRSTSOCKET];  curl_off_t *bytecount = &data->req.bytecount;  char *path = data->state.path;  char *sel;  char *sel_org = NULL;  ssize_t amount, k;  int len;  *done = TRUE; /* unconditionally */  /* Create selector. Degenerate cases: / and /1 => convert to "" */  if(strlen(path) <= 2) {    sel = (char *)"";    len = (int)strlen(sel);  }  else {    char *newp;    size_t j, i;    /* Otherwise, drop / and the first character (i.e., item type) ... */    newp = path;    newp+=2;    /* ... then turn ? into TAB for search servers, Veronica, etc. ... */    j = strlen(newp);    for(i=0; i<j; i++)      if(newp[i] == '?')        newp[i] = '/x09';    /* ... and finally unescape */    sel = curl_easy_unescape(data, newp, 0, &len);    if(!sel)      return CURLE_OUT_OF_MEMORY;    sel_org = sel;  }  /* We use Curl_write instead of Curl_sendf to make sure the entire buffer is     sent, which could be sizeable with long selectors. */  k = curlx_uztosz(len);  for(;;) {    result = Curl_write(conn, sockfd, sel, k, &amount);    if(!result) { /* Which may not have written it all! */      result = Curl_client_write(conn, CLIENTWRITE_HEADER, sel, amount);      if(result) {        free(sel_org);        return result;      }      k -= amount;      sel += amount;      if(k < 1)        break; /* but it did write it all */    }    else {      failf(data, "Failed sending Gopher request");      free(sel_org);      return result;    }    /* Don't busyloop. The entire loop thing is a work-around as it causes a       BLOCKING behavior which is a NO-NO. This function should rather be       split up in a do and a doing piece where the pieces that aren't       possible to send now will be sent in the doing function repeatedly       until the entire request is sent.       Wait a while for the socket to be writable. Note that this doesn't       acknowledge the timeout.    */    Curl_socket_ready(CURL_SOCKET_BAD, sockfd, 100);  }  free(sel_org);  /* We can use Curl_sendf to send the terminal /r/n relatively safely and     save allocing another string/doing another _write loop. */  result = Curl_sendf(sockfd, conn, "/r/n");  if(result) {    failf(data, "Failed sending Gopher request");    return result;  }  result = Curl_client_write(conn, CLIENTWRITE_HEADER, (char *)"/r/n", 2);  if(result)    return result;  Curl_setup_transfer(conn, FIRSTSOCKET, -1, FALSE, bytecount,                      -1, NULL); /* no upload */  return CURLE_OK;}
开发者ID:AlexShiLucky,项目名称:luapower-all,代码行数:92,



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


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