Hi!
2. What does streams has to do with this networking? Can it be done using
streams?
Yes, it can. Take the following simple, incomplete example without much
error handling as a starting point:
// in the header
#include "php_streams.h"
// PHP function:
PHP_FUNCTION(simplehttp_fetch)
{
php_stream *stream;
struct timeval tv;
int err;
char *errstr;
char buf[8192];
tv.tv_sec = 30;
tv.tv_usec = 0;
stream = php_stream_xport_create("tcp://www.google.com:80",
sizeof("tcp://www.google.com:80")-1,
ENFORCE_SAFE_MODE | REPORT_ERRORS,
TREAM_XPORT_CLIENT | STREAM_XPORT_CONNECT,
NULL, &tv, NULL, &errstr, &err);
if (stream == NULL) {
php_error(E_WARNING TSRMLS_CC,
"unable to connect to tcp://www.google.com:80: %s",
errstr == NULL ? "unknown error" : errstr);
RETURN_NULL();
}
php_stream_write(stream,
"GET / HTTP/1.0\r\nHost: www.google.com\r\n\r\n",
sizeof("GET / HTTP/1.0\r\nHost: www.google.com\r\n\r\n")-1);
memset(buf, 0, 8192);
php_stream_read(stream, buf, 8191);
php_stream_close(stream);
RETURN_STRING(buf, 1);
}
Basically, you want to look at main/php_streams.h and
main/streams/php_stream_transport.h in the PHP source code. Userland
fsockopen() essentially maps to php_stream_xport_create() and userland
fread, fwrite, close, etc. essentially map to php_stream_read(),
php_stream_write, php_stream_close, etc.
Regards,
Christian
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php