curl-library
Re: can Curl use socket() created by application?
Date: Mon, 22 Aug 2011 15:30:33 -0400
Any views on it??
On Mon, Aug 22, 2011 at 10:19 AM, amit paliwal <amit.ambitions_at_gmail.com>wrote:
>
>
>>  WHAT IS WRONG HERE????????????????
>>>
>>
>> Which libcurl version on what platform is this?
>>
> -------------I am using curl-7.21.7 and platform is Linux
>
>
>> Can you please submit a complete source code so that we can try to repeat
>> it in our ends?
>
> ----- complete code goes like this:
>
> #include <stdio.h>
> #include <string.h>
> #include <stdlib.h>
> #include <curl/curl.h>
> #include <linux/types.h>
> #include <linux/socket.h>
> #include <sys/types.h>
> #include <sys/socket.h>
>
> #include <sys/socket.h>       /*  socket definitions        */
> #include <sys/types.h>        /*  socket types              */
> #include <arpa/inet.h>        /*  inet (3) funtions         */
> #include <unistd.h>           /*  misc. UNIX functions      */
>
> #include <errno.h>
>
> int sockfd;
>
>
>
> curl_socket_t opensocket (void *clientp,
>                             curlsocktype purpose,
>                             struct curl_sockaddr *address)
> {
>     printf( "ECHOCLNT: socket fd: %d\n",sockfd);
>     return sockfd;
>
> }
>
>
> int sockopt_callback(void *clientp, curl_socket_t curlfd, curlsocktype
> purpose)
> {
>     printf( "Inside sockopt_callback::%d",curlfd);
>       fflush(stdout);
>     return CURL_SOCKOPT_ALREADY_CONNECTED;
> }
>
>
> int main(void)
> {
>   CURL *curl;
>   CURLcode res;
>
>   long sockextr;
>   size_t iolen;
>
>   curl = curl_easy_init();
>   if(curl) {
>     curl_easy_setopt(curl, CURLOPT_URL, "URL"); //please add ur URL here
>
>
>      /*  Create the listening socket  */
>
>     if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0 ) {
>     fprintf(stderr, "ECHOCLNT: Error creating listening socket.\n");
>     exit(EXIT_FAILURE);
>     }
>
>
>     struct    sockaddr_in servaddr;  /*  socket address structure  */
>     memset(&servaddr, 0, sizeof(servaddr));
>     servaddr.sin_family      = AF_INET;
>     servaddr.sin_port        = htons(8080);
>  /*  Set the remote IP address  */
>
>     if ( inet_aton("IP", &servaddr.sin_addr) <= 0 ) { //please add ur IP
> here
>     printf("ECHOCLNT: Invalid remote IP address.\n");
>     exit(EXIT_FAILURE);
>     }
>
>
> printf( "ECHOCLNT: socket fd before connect: %d\n",sockfd);
>
>    if (connect(sockfd,(struct sockaddr *) &servaddr, sizeof(servaddr)) ==
> -1) {
>             close(sockfd);
>             printf("client error: connect: %s", strerror(errno));
>
>         }
>
>
>
>     /* no progress meter please */
>   curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1L);
>
>
>   /* send all data to this function  */
>   curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
>   curl_easy_setopt(curl, CURLOPT_URL, "URL"); //please add ur URL here
>
>
>    res = curl_easy_setopt(curl, CURLOPT_OPENSOCKETFUNCTION, opensocket);
>    printf("\nRdvr: Option CURLOPT_OPENSOCKETFUNCTION Set with status:
> %s\n",curl_easy_strerror(res));
>    fflush(stdout);
>
>
>
>    res = curl_easy_setopt(curl, CURLOPT_SOCKOPTFUNCTION, sockopt_callback);
>    printf("\nRdvr: Option CURLOPT_SOCKOPTFUNCTION Set with status:
> %s\n",curl_easy_strerror(res));
>    fflush(stdout);
>
>
>    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
>
>
>
>     res = curl_easy_perform(curl);
>
>     if(CURLE_OK != res)
>     {
>       printf("Error: %s\n", strerror(res));
>       return 1;
>     }
>
>    return 1;
>
>
>   }
>
> }
>
>>
>>
>> --
>>
>>  / daniel.haxx.se
>> ------------------------------**------------------------------**-------
>> List admin: http://cool.haxx.se/list/**listinfo/curl-library<http://cool.haxx.se/list/listinfo/curl-library>
>> Etiquette:  http://curl.haxx.se/mail/**etiquette.html<http://curl.haxx.se/mail/etiquette.html>
>>
>
>
>
> --
> Regards,
> Amit
>
>
-- Regards, Amit
-------------------------------------------------------------------
List admin: http://cool.haxx.se/list/listinfo/curl-library
Etiquette:  http://curl.haxx.se/mail/etiquette.html
Received on 2011-08-22