यह देर हो सकती है, लेकिन भविष्य के उपयोगकर्ताओं के लिए एक अच्छा संदर्भ दे सकता है। यूआरएल http://developerweb.net/viewtopic.php?id=6824 पर चयन() फ़ंक्शन का उपयोग करने पर एक अच्छा धागा है। एक उदाहरण उद्धृत के रूप में केवल SSL_read()
या SSL_write()
प्रदर्शन के बाद इस प्रकार
int sslsock_handle_nbio (ssl, ret, totv)
void *ssl; /* -> the SSL info */
int ret; /* the SSL I/O function return value */
struct timeval *totv; /* -> timeout info, or NULL */
{
int sfd, i;
fd_set rset, wset;
sfd = SSL_get_fd (ssl);
i = SSL_get_error (ssl, ret);
if (i == SSL_ERROR_WANT_READ) {
do {
FD_ZERO (&rset);
FD_SET (sfd, &rset);
i = select (sfd + 1, &rset, NULL, NULL, totv);
} while ((i < 0) && (errno == EINTR));
if (i == 0) {
/* the select() timed out */
ret = -2;
errno = ETIMEDOUT;
} else {
/* either an error, or it's readable */
ret = i;
}
} else if (i == SSL_ERROR_WANT_WRITE) {
do {
FD_ZERO (&wset);
FD_SET (sfd, &wset);
i = select (sfd + 1, NULL, &wset, NULL, totv);
} while ((i < 0) && (errno == EINTR));
if (i == 0) {
/* the select() timed out */
ret = -2;
errno = ETIMEDOUT;
} else {
/* either an error, or it's writable */
ret = i;
}
}
/* else, leave "ret" alone, and return it as-is */
return (ret);
}
यह है।
एसएसएल संचार सामान्य "बीएसडी" सॉकेट का उपयोग करता है, यह सिर्फ एक और प्रोटोकॉल स्तर है उदा। टीसीपी। –