[gnutls-devel] Waiting for input data
Tim Ruehsen
tim.ruehsen at gmx.de
Fri Feb 8 16:15:19 CET 2013
Am Friday 08 February 2013 schrieb Jaak Ristioja:
> On 08.02.2013 16:38, Tim Ruehsen wrote:
> > Am Friday 08 February 2013 schrieb Jaak Ristioja:
> >> On 08.02.2013 15:54, Tim Ruehsen wrote:
> >>> Maybe this code snippet/example from libmget (License LGPL3+) may help
> >>> you: It assumes a non-blocking socket descriptor set by
> >>>
> >>> gnutls_transport_set_ptr(session, (void *)(ssize_t)sockfd);
> >>
> >> Well I have used (void *)(intptr_t) sockfd, but it doesn't solve the
> >> real issue here, it just silences the compiler. When converted back
> >> using (int)(intptr_t), it might not compare equal to the original.
> >
> > Couldn't you use a pointer to your 'socket'.
> >
> > gnutls_transport_set_ptr(session, &sockfd);
> >
> > and reading back with
> >
> > int sockfd = *(int *)gnutls_transport_get_ptr(session);
> >
> > If your sockfd is of type 'int'. If not, use a different type.
>
> No I can't. The variable sockfd might go out of scope or get destroyed
> otherwise, effectively invalidating the pointer.
If you don't use threads, just use a static variable to store your sockfd.
With threads, you just malloc a store for sockfd
sockfd_ptr = malloc(sizeof(sockfd));
*sockfd_ptr = sockfd;
gnutls_transport_set_ptr(session, sockfd_ptr);
when closing the session, you have to free it:
free(gnutls_transport_get_ptr(session));
Mit freundlichem Gruß
Tim Rühsen
More information about the Gnutls-devel
mailing list