Hello,
I've written a simple multithreaded server application for inhouse use.
This server accepts connections, asks for user and password a la
the POP-3 protocol, and accepts an XML data file for upload.
I used the following pseudocode:
gnet_inetaddr_set_port()
gnet_server_new( .. ob_server_func .. )
g_main_run(..)
static void ob_server_func() {
...
case GNET_SERVER_STATUS_CONNECT:
{
if (debug) {
LOG(LOG_DEBUG, "New connection from %s", gnet_inetaddr_get_canonical_name(conn->inetaddr));
}
conn->func = ob_client_func;
conn->user_data = calloc(1, sizeof(struct conn_stat));
gnet_conn_write (conn, strdup(hello), strlen(hello), 0);
gnet_conn_readline (conn, NULL, 1024, 30000);
break;
}
ob_client_func(..)
switch (status) {
case GNET_CONN_STATUS_READ:
{
readline, save to file....
Everything works fine, but performance is really terrible, even a
256KB file takes a full minute, while CPU load goes to 100%.
If I connect an strace to the server I see:
read(7, "t", 1) = 1
gettimeofday({1037278727, 452872}, NULL) = 0
gettimeofday({1037278727, 452956}, NULL) = 0
poll([{fd=3, events=POLLIN}, {fd=5, events=POLLIN}, {fd=6, events=POLLIN}, {fd=7, events=POLLIN, revents=POLLIN}], 4, 8688) = 1
gettimeofday({1037278727, 453147}, NULL) = 0
read(7, "e", 1)
which means the input is read byte-for-byte from the network.
Is this normal behaviour?
Am I doing something wrong here?
I am using GNet 1.1.7 with Glib 2.0.6
Thanks,
Ron Arts
--
Netland Internet Services
bedrijfsmatige internetoplossingen
http://www.netland.nl Kruislaan 419 1098 VA Amsterdam
info: 020-5628282 servicedesk: 020-5628280 fax: 020-5628281
NETWORK: What fishermen do when not fishing.
Attachment:
smime.p7s
Description: S/MIME Cryptographic Signature