diff options
author | ultramage <ultramage@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2007-12-17 13:23:34 +0000 |
---|---|---|
committer | ultramage <ultramage@54d463be-8e91-2dee-dedb-b68131a5f0ec> | 2007-12-17 13:23:34 +0000 |
commit | 3a4984a967675b1fd10c84730994bf08766c639d (patch) | |
tree | 00be3127a35d41ecbf1cb8f3b56922cd3575f36b /src/common | |
parent | 1110866d367cb7a158e0b4c9dc2a16e15d3ca90d (diff) | |
download | hercules-3a4984a967675b1fd10c84730994bf08766c639d.tar.gz hercules-3a4984a967675b1fd10c84730994bf08766c639d.tar.bz2 hercules-3a4984a967675b1fd10c84730994bf08766c639d.tar.xz hercules-3a4984a967675b1fd10c84730994bf08766c639d.zip |
* Added flag.server to indicate interserver sockets
- replaces the previous way (setting 'client_addr' to 0)
git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@11930 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/socket.c | 22 | ||||
-rw-r--r-- | src/common/socket.h | 13 |
2 files changed, 19 insertions, 16 deletions
diff --git a/src/common/socket.c b/src/common/socket.c index 83c2dc7fd..b1c564034 100644 --- a/src/common/socket.c +++ b/src/common/socket.c @@ -282,7 +282,7 @@ void set_eof(int fd) // Add this socket to the shortlist for eof handling. send_shortlist_add_fd(fd); #endif - session[fd]->eof = 1; + session[fd]->flag.eof = 1; } } @@ -460,15 +460,15 @@ int make_listen_bind(uint32 ip, uint16 port) sFD_SET(fd, &readfds); create_session(fd, connect_client, null_send, null_parse); + session[fd]->client_addr = 0; // just listens session[fd]->rdata_tick = 0; // disable timeouts on this socket - session[fd]->client_addr = 0; return fd; } int make_connection(uint32 ip, uint16 port) { - struct sockaddr_in server_address; + struct sockaddr_in remote_address; int fd; int result; @@ -493,13 +493,13 @@ int make_connection(uint32 ip, uint16 port) setsocketopts(fd); - server_address.sin_family = AF_INET; - server_address.sin_addr.s_addr = htonl(ip); - server_address.sin_port = htons(port); + remote_address.sin_family = AF_INET; + remote_address.sin_addr.s_addr = htonl(ip); + remote_address.sin_port = htons(port); ShowStatus("Connecting to %d.%d.%d.%d:%i\n", CONVIP(ip), port); - result = sConnect(fd, (struct sockaddr *)(&server_address), sizeof(struct sockaddr_in)); + result = sConnect(fd, (struct sockaddr *)(&remote_address), sizeof(struct sockaddr_in)); if( result == SOCKET_ERROR ) { ShowError("make_connection: connect failed (socket #%d, code %d)!\n", fd, sErrno); do_close(fd); @@ -512,7 +512,7 @@ int make_connection(uint32 ip, uint16 port) sFD_SET(fd,&readfds); create_session(fd, recv_to_fifo, send_from_fifo, default_func_parse); - session[fd]->client_addr = 0; + session[fd]->client_addr = ntohl(remote_address.sin_addr.s_addr); return fd; } @@ -1252,7 +1252,7 @@ bool session_isValid(int fd) bool session_isActive(int fd) { - return ( session_isValid(fd) && !session[fd]->eof ); + return ( session_isValid(fd) && !session[fd]->flag.eof ); } // Resolves hostname into a numeric ip. @@ -1327,12 +1327,12 @@ void send_shortlist_do_sends() // If it's been marked as eof, call the parse func on it so that // the socket will be immediately closed. - if( session[fd]->eof ) + if( session[fd]->flag.eof ) session[fd]->func_parse(fd); // If the session still exists, is not eof and has things left to // be sent from it we'll keep it in the shortlist. - if( session[fd] && !session[fd]->eof && session[fd]->wdata_size ) + if( session[fd] && !session[fd]->flag.eof && session[fd]->wdata_size ) { send_shortlist_set[fd/32] |= 1<<(fd%32); ++i; diff --git a/src/common/socket.h b/src/common/socket.h index cdbac8f00..73322a206 100644 --- a/src/common/socket.h +++ b/src/common/socket.h @@ -35,7 +35,7 @@ #define RFIFOSPACE(fd) (session[fd]->max_rdata - session[fd]->rdata_size) #define WFIFOSPACE(fd) (session[fd]->max_wdata - session[fd]->wdata_size) -#define RFIFOREST(fd) (session[fd]->eof ? 0 : session[fd]->rdata_size - session[fd]->rdata_pos) +#define RFIFOREST(fd) (session[fd]->flag.eof ? 0 : session[fd]->rdata_size - session[fd]->rdata_pos) #define RFIFOFLUSH(fd) \ do { \ if(session[fd]->rdata_size == session[fd]->rdata_pos){ \ @@ -70,16 +70,19 @@ typedef int (*ParseFunc)(int fd); struct socket_data { - unsigned char eof; + struct { + unsigned char eof : 1; + unsigned char server : 1; + } flag; - unsigned char *rdata, *wdata; + uint32 client_addr; // remote client address + + uint8 *rdata, *wdata; size_t max_rdata, max_wdata; size_t rdata_size, wdata_size; size_t rdata_pos; time_t rdata_tick; // time of last recv (for detecting timeouts); zero when timeout is disabled - uint32 client_addr; // remote client address (0 for server connections) - RecvFunc func_recv; SendFunc func_send; ParseFunc func_parse; |