Onko mahdollista käyttää select() -funktiota ssl-sockettien kanssa? Selectillehän annetaan filedescriptorit, jota se kuuntelee. Mutta kun ssl:ää käytettäessä ei ole fd:tä, on vain SSL *.
Olen katsellut esimerkkejä kirjasta "Network Security with OpenSSL" ja siinä käytetään threadejä. Olisi vaan helpompi tehdä ohjelma ilman threadejä käyttäen selectiä.
Onko kukaan, joka on ohjelmoinnut ssl-socketteja, törmännyt samaan ongelmaan?
Alla on vielä esimerkkikoodi, johon siis pitäisi saada threadin tilalle select().
int do_server_loop(SSL *ssl)
{
int err, nread;
char buf[80];
do
{
for (nread = 0; nread < sizeof(buf); nread = err)
{
err = SSL_read(ssl, buf nread, sizeof(buf) - nread);
if (err 0);
return (SSL_get_shutdown(ssl) & SSL_RECEIVED_SHUTDOWN) ? 1 : 0;
}
void THREAD_CC server_thread(void *arg)
{
SSL *ssl = (SSL *)arg;
#ifndef WIN32
pthread_detach(pthread_self( ));
#endif
if (SSL_accept(ssl)
Olen katsellut esimerkkejä kirjasta "Network Security with OpenSSL" ja siinä käytetään threadejä. Olisi vaan helpompi tehdä ohjelma ilman threadejä käyttäen selectiä.
Onko kukaan, joka on ohjelmoinnut ssl-socketteja, törmännyt samaan ongelmaan?
Alla on vielä esimerkkikoodi, johon siis pitäisi saada threadin tilalle select().
int do_server_loop(SSL *ssl)
{
int err, nread;
char buf[80];
do
{
for (nread = 0; nread < sizeof(buf); nread = err)
{
err = SSL_read(ssl, buf nread, sizeof(buf) - nread);
if (err 0);
return (SSL_get_shutdown(ssl) & SSL_RECEIVED_SHUTDOWN) ? 1 : 0;
}
void THREAD_CC server_thread(void *arg)
{
SSL *ssl = (SSL *)arg;
#ifndef WIN32
pthread_detach(pthread_self( ));
#endif
if (SSL_accept(ssl)
Vastaukset 2
Vanhimmat
Luuletko sä että joku täällä tietää xD kokeile vaikka mureakuhan foorumeita.
Tällä ei kukaan tiedä mistään mitään. porukka luulee että galtsu on irc jne..
Dokkareista löytyy tollainen komento kuin SSL_get_fd, josta saattaisi olla apua tuossa.