sockets and fds
| From: | Ron Lange | Date: | Thu, 25 Jul 2002 22:25:52 +0000 |
| Subject: | sockets and fds | ||
| Groups: | php.dev | ||
| Request: | Send a blank email to php-dev+get-86212@lists.php.net to get a copy of this message | ||
Hello friends,
I have a couple of questions about sockets and file descriptors.
In my extension I make use of a ordinary c socket and two fds build on it.
I want this connection to be kept over request, therefore I put a struct
pointer containing this into the persistant_list of the zend engine.
I made it like the mysql extension, which is looking for an already opened
connection by zend_hash_find(). If a connection already exists, it will be
used, if not, a new connection struct is malloced (not emalloc()) and
inserted into a new list_entry, which is immediately hashed into the
persistand list. As key I use a emalloced string, consisting of a prefix
and the session id, since I need to map sessions to connections.
I've also implement a zend_list_destructor for a persistent resource,
actual the allocated conn. struct. There the items of the struct will be
freed by fclose(), close() and at last the whole struct by free().
The exported extension functions are calling sometimes not exported
functions, which are not introduced by the function list macro. This
functions do some not-zend-related-stuff, but make use of the allocated
connection.
The initialization of the connection succeed, the functions in the same
request are working how I want them to, but the explicitly closing of the
connection causes a segfault. If a new request attempts to reuse the
connection, the fds are lost, respectively the connection struct pointer
seems to be invalid -> segfault.
Now my questions:
1. Is there anything to know about using standart c sockets and fds within
php extensions?
2. Do pointers stay valid over request end, if they're malloced (not
emalloc())?
3. Should anything be considered about additional c functions, which not
exported? (if at all...)
I am not experienced with threads, therefore I might have forget some
details...about allocations in threads an so on...
Good night and best regards
Ron