Annotation of embedaddon/curl/lib/connect.h, revision 1.1.1.1
1.1 misho 1: #ifndef HEADER_CURL_CONNECT_H
2: #define HEADER_CURL_CONNECT_H
3: /***************************************************************************
4: * _ _ ____ _
5: * Project ___| | | | _ \| |
6: * / __| | | | |_) | |
7: * | (__| |_| | _ <| |___
8: * \___|\___/|_| \_\_____|
9: *
10: * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
11: *
12: * This software is licensed as described in the file COPYING, which
13: * you should have received as part of this distribution. The terms
14: * are also available at https://curl.haxx.se/docs/copyright.html.
15: *
16: * You may opt to use, copy, modify, merge, publish, distribute and/or sell
17: * copies of the Software, and permit persons to whom the Software is
18: * furnished to do so, under the terms of the COPYING file.
19: *
20: * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
21: * KIND, either express or implied.
22: *
23: ***************************************************************************/
24: #include "curl_setup.h"
25:
26: #include "nonblock.h" /* for curlx_nonblock(), formerly Curl_nonblock() */
27: #include "sockaddr.h"
28: #include "timeval.h"
29:
30: CURLcode Curl_is_connected(struct connectdata *conn,
31: int sockindex,
32: bool *connected);
33:
34: CURLcode Curl_connecthost(struct connectdata *conn,
35: const struct Curl_dns_entry *host);
36:
37: /* generic function that returns how much time there's left to run, according
38: to the timeouts set */
39: timediff_t Curl_timeleft(struct Curl_easy *data,
40: struct curltime *nowp,
41: bool duringconnect);
42:
43: #define DEFAULT_CONNECT_TIMEOUT 300000 /* milliseconds == five minutes */
44:
45: /*
46: * Used to extract socket and connectdata struct for the most recent
47: * transfer on the given Curl_easy.
48: *
49: * The returned socket will be CURL_SOCKET_BAD in case of failure!
50: */
51: curl_socket_t Curl_getconnectinfo(struct Curl_easy *data,
52: struct connectdata **connp);
53:
54: bool Curl_addr2string(struct sockaddr *sa, curl_socklen_t salen,
55: char *addr, long *port);
56:
57: /*
58: * Check if a connection seems to be alive.
59: */
60: bool Curl_connalive(struct connectdata *conn);
61:
62: #ifdef USE_WINSOCK
63: /* When you run a program that uses the Windows Sockets API, you may
64: experience slow performance when you copy data to a TCP server.
65:
66: https://support.microsoft.com/kb/823764
67:
68: Work-around: Make the Socket Send Buffer Size Larger Than the Program Send
69: Buffer Size
70:
71: */
72: void Curl_sndbufset(curl_socket_t sockfd);
73: #else
74: #define Curl_sndbufset(y) Curl_nop_stmt
75: #endif
76:
77: void Curl_updateconninfo(struct connectdata *conn, curl_socket_t sockfd);
78: void Curl_persistconninfo(struct connectdata *conn);
79: int Curl_closesocket(struct connectdata *conn, curl_socket_t sock);
80:
81: /*
82: * The Curl_sockaddr_ex structure is basically libcurl's external API
83: * curl_sockaddr structure with enough space available to directly hold any
84: * protocol-specific address structures. The variable declared here will be
85: * used to pass / receive data to/from the fopensocket callback if this has
86: * been set, before that, it is initialized from parameters.
87: */
88: struct Curl_sockaddr_ex {
89: int family;
90: int socktype;
91: int protocol;
92: unsigned int addrlen;
93: union {
94: struct sockaddr addr;
95: struct Curl_sockaddr_storage buff;
96: } _sa_ex_u;
97: };
98: #define sa_addr _sa_ex_u.addr
99:
100: /*
101: * Create a socket based on info from 'conn' and 'ai'.
102: *
103: * Fill in 'addr' and 'sockfd' accordingly if OK is returned. If the open
104: * socket callback is set, used that!
105: *
106: */
107: CURLcode Curl_socket(struct connectdata *conn,
108: const Curl_addrinfo *ai,
109: struct Curl_sockaddr_ex *addr,
110: curl_socket_t *sockfd);
111:
112: /*
113: * Curl_conncontrol() marks the end of a connection/stream. The 'closeit'
114: * argument specifies if it is the end of a connection or a stream.
115: *
116: * For stream-based protocols (such as HTTP/2), a stream close will not cause
117: * a connection close. Other protocols will close the connection for both
118: * cases.
119: *
120: * It sets the bit.close bit to TRUE (with an explanation for debug builds),
121: * when the connection will close.
122: */
123:
124: #define CONNCTRL_KEEP 0 /* undo a marked closure */
125: #define CONNCTRL_CONNECTION 1
126: #define CONNCTRL_STREAM 2
127:
128: void Curl_conncontrol(struct connectdata *conn,
129: int closeit
130: #if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
131: , const char *reason
132: #endif
133: );
134:
135: #if defined(DEBUGBUILD) && !defined(CURL_DISABLE_VERBOSE_STRINGS)
136: #define streamclose(x,y) Curl_conncontrol(x, CONNCTRL_STREAM, y)
137: #define connclose(x,y) Curl_conncontrol(x, CONNCTRL_CONNECTION, y)
138: #define connkeep(x,y) Curl_conncontrol(x, CONNCTRL_KEEP, y)
139: #else /* if !DEBUGBUILD || CURL_DISABLE_VERBOSE_STRINGS */
140: #define streamclose(x,y) Curl_conncontrol(x, CONNCTRL_STREAM)
141: #define connclose(x,y) Curl_conncontrol(x, CONNCTRL_CONNECTION)
142: #define connkeep(x,y) Curl_conncontrol(x, CONNCTRL_KEEP)
143: #endif
144:
145: bool Curl_conn_data_pending(struct connectdata *conn, int sockindex);
146:
147: #endif /* HEADER_CURL_CONNECT_H */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>