mirror of
https://github.com/curl/curl.git
synced 2026-08-25 03:43:31 +03:00
David McCreedy added CURLOPT_SOCKOPTFUNCTION and CURLOPT_SOCKOPTDATA to
allow applications to set their own socket options.
This commit is contained in:
parent
2ff609dd43
commit
5acadc9cd7
9 changed files with 104 additions and 56 deletions
|
|
@ -702,6 +702,17 @@ singleipconnect(struct connectdata *conn,
|
|||
|
||||
nosigpipe(conn, sockfd);
|
||||
|
||||
if(data->set.fsockopt) {
|
||||
/* activate callback for setting socket options */
|
||||
error = data->set.fsockopt(data->set.sockopt_client,
|
||||
sockfd,
|
||||
CURLSOCKTYPE_IPCXN);
|
||||
if (error) {
|
||||
sclose(sockfd); /* close the socket and bail out */
|
||||
return CURL_SOCKET_BAD;
|
||||
}
|
||||
}
|
||||
|
||||
/* possibly bind the local end to an IP, interface or port */
|
||||
res = bindlocal(conn, sockfd);
|
||||
if(res) {
|
||||
|
|
|
|||
13
lib/setup.h
13
lib/setup.h
|
|
@ -278,19 +278,6 @@ int fileno( FILE *stream);
|
|||
|
||||
#endif /* WIN32 */
|
||||
|
||||
#ifndef curl_socket_typedef
|
||||
/* now typedef our socket type */
|
||||
#ifdef WIN32
|
||||
typedef SOCKET curl_socket_t;
|
||||
#define CURL_SOCKET_BAD INVALID_SOCKET
|
||||
#else
|
||||
typedef int curl_socket_t;
|
||||
#define CURL_SOCKET_BAD -1
|
||||
#endif
|
||||
#define curl_socket_typedef
|
||||
#endif /* curl_socket_typedef */
|
||||
|
||||
|
||||
#if defined(WIN32) && !defined(__CYGWIN__) && !defined(USE_ARES) && \
|
||||
!defined(__LCC__) /* lcc-win32 doesn't have _beginthreadex() */
|
||||
#ifdef ENABLE_IPV6
|
||||
|
|
|
|||
14
lib/url.c
14
lib/url.c
|
|
@ -1551,6 +1551,20 @@ CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option,
|
|||
data->set.ftp_alternative_to_user = va_arg(param, char *);
|
||||
break;
|
||||
|
||||
case CURLOPT_SOCKOPTFUNCTION:
|
||||
/*
|
||||
* socket callback function: called after socket() but before connect()
|
||||
*/
|
||||
data->set.fsockopt = va_arg(param, curl_sockopt_callback);
|
||||
break;
|
||||
|
||||
case CURLOPT_SOCKOPTDATA:
|
||||
/*
|
||||
* socket callback data pointer. Might be NULL.
|
||||
*/
|
||||
data->set.sockopt_client = va_arg(param, void *);
|
||||
break;
|
||||
|
||||
default:
|
||||
/* unknown tag and its companion, just ignore: */
|
||||
result = CURLE_FAILED_INIT; /* correct this */
|
||||
|
|
|
|||
|
|
@ -1029,6 +1029,8 @@ struct UserDefined {
|
|||
curl_progress_callback fprogress; /* function for progress information */
|
||||
curl_debug_callback fdebug; /* function that write informational data */
|
||||
curl_ioctl_callback ioctl; /* function for I/O control */
|
||||
curl_sockopt_callback fsockopt; /* function for setting socket options */
|
||||
void *sockopt_client; /* pointer to pass to the socket options callback */
|
||||
|
||||
/* the 3 curl_conv_callback functions below are used on non-ASCII hosts */
|
||||
/* function to convert from the network encoding: */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue