SSL-socketit ja select()

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)
2235
Äänestä

Muut lukivat myös

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..

Äänestä

Dokkareista löytyy tollainen komento kuin SSL_get_fd, josta saattaisi olla apua tuossa.

Äänestä

Kommentoi aloitusta


Vesa kirjoitti:

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)

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu