}\r
\r
printf("Connection opened\n");\r
+ ProcessIncoming(&srv);\r
\r
writef(srv.FD, "USER %s %s %s : %s\n", gsUsername, gsHostname, gsRemoteAddress, gsRealName);\r
- writef(srv.FD, "NICK %s", gsNickname);\r
+ writef(srv.FD, "NICK %s\n", gsNickname);\r
\r
- ProcessIncoming(&srv);\r
+ printf("Processing\n");\r
+ \r
+ for( ;; )\r
+ {\r
+ fd_set readfds;\r
+ int rv;\r
+ \r
+ FD_ZERO(&readfds);\r
+ FD_SET(0, &readfds); // stdin\r
+ FD_SET(srv.FD, &readfds);\r
+ \r
+ rv = select(srv.FD, &readfds, 0, 0, NULL);\r
+ if( rv == -1 ) break;\r
+ \r
+ if(FD_ISSET(0, &readfds))\r
+ {\r
+ // User input\r
+ }\r
+ \r
+ // Server response\r
+ if(FD_ISSET(srv.FD, &readfds))\r
+ {\r
+ ProcessIncoming(&srv);\r
+ }\r
+ }\r
\r
close(srv.FD);\r
return 0;\r
char *ret = Src + pos;\r
char *end;\r
\r
+ if( !Src ) return NULL;\r
+ \r
while( *ret == ' ' ) ret ++;\r
\r
end = strchr(ret, ' ');\r
*/\r
void ParseServerLine(tServer *Server, char *Line)\r
{\r
- int pos;\r
+ int pos = 0;\r
char *ident, *cmd;\r
if( *Line == ':' ) {\r
// Message\r
// process it line by line\r
// ioctl#8 on a TCP client gets the number of bytes in the recieve buffer\r
// - Used to avoid blocking\r
- while( ioctl(Server->FD, 8, NULL) )\r
+ #if NON_BLOCK_READ\r
+ while( (len = ioctl(Server->FD, 8, NULL)) > 0 )\r
{\r
+ #endif\r
// Read data\r
- len = read(Server->FD, BUFSIZ - Server->ReadPos, Server->InBuf + Server->ReadPos);\r
+ len = read(Server->FD, BUFSIZ - Server->ReadPos, &Server->InBuf[Server->ReadPos]);\r
Server->InBuf[Server->ReadPos + len] = '\0';\r
\r
// Break into lines\r
\r
// Handle incomplete lines\r
if( ptr - Server->InBuf < len + Server->ReadPos ) {\r
- Server->ReadPos = ptr - Server->InBuf;\r
+ // Update the read position\r
+ // InBuf ReadPos ptr ReadPos+len\r
+ // | old | new used | new unused |\r
+ Server->ReadPos = len + Server->ReadPos - (ptr - Server->InBuf);\r
+ // Copy stuff back (moving "new unused" to the start of the buffer)\r
memcpy(Server->InBuf, ptr, Server->ReadPos);\r
}\r
else {\r
Server->ReadPos = 0;\r
}\r
+ #if NON_BLOCK_READ\r
}\r
+ #endif\r
}\r
\r
/**\r