diff options
Diffstat (limited to 'libjava/classpath/native/target/generic/target_generic_network.h')
-rw-r--r-- | libjava/classpath/native/target/generic/target_generic_network.h | 1278 |
1 files changed, 1278 insertions, 0 deletions
diff --git a/libjava/classpath/native/target/generic/target_generic_network.h b/libjava/classpath/native/target/generic/target_generic_network.h new file mode 100644 index 00000000000..dbbd92e2c92 --- /dev/null +++ b/libjava/classpath/native/target/generic/target_generic_network.h @@ -0,0 +1,1278 @@ +/* target_generic_network.h - Native methods for network operations. + Copyright (C) 1998, 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +/* +Description: generic target defintions of network functions +Systems : all +*/ + +#ifndef __TARGET_GENERIC_NETWORK__ +#define __TARGET_GENERIC_NETWORK__ + +/* check if target_native_network.h included */ +#ifndef __TARGET_NATIVE_NETWORK__ + #error Do NOT INCLUDE generic target files! Include the corresponding native target files instead! +#endif + +/****************************** Includes *******************************/ +/* do not move; needed here because of some macro definitions */ +#include "config.h" + +#include <stdlib.h> + +#include "target_native.h" + +/****************** Conditional compilation switches *******************/ + +/***************************** Constants *******************************/ + +/***************************** Datatypes *******************************/ + +/***************************** Variables *******************************/ + +/****************************** Macros *********************************/ + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_IPADDRESS_BYTES_TO_INT +* Purpose : convert IP adddress (4 parts) into integer (host-format +* 32bit) +* Input : n0,n1,n2,n3 - IP address parts +* Output : i - integer with IP address in host-format +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_IPADDRESS_BYTES_TO_INT + #define TARGET_NATIVE_NETWORK_IPADDRESS_BYTES_TO_INT(n0,n1,n2,n3,i) \ + do { \ + i=(((unsigned char)n0) << 24) | \ + (((unsigned char)n1) << 16) | \ + (((unsigned char)n2) << 8) | \ + (((unsigned char)n3) << 0); \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_INT_TO_IPADDRESS_BYTES +* Purpose : convert IP adddress (4 parts) into integer (host-format +* 32bit) +* Input : n0,n1,n2,n3 - IP address parts +* Output : i - integer with IP address in host-format +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_INT_TO_IPADDRESS_BYTES + #define TARGET_NATIVE_NETWORK_INT_TO_IPADDRESS_BYTES(i,n0,n1,n2,n3) \ + do { \ + n0=(i & 0xFF000000) >> 24; \ + n1=(i & 0x00FF0000) >> 16; \ + n2=(i & 0x0000FF00) >> 8; \ + n3=(i & 0x000000FF) >> 0; \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_GET_HOSTNAME +* Purpose : get hostname +* Input : maxNameLen - max. length of name +* Output : name - name (NUL terminated) +* result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_GET_HOSTNAME + #include <unistd.h> + #define TARGET_NATIVE_NETWORK_GET_HOSTNAME(name,maxNameLen,result) \ + do { \ + result=(gethostname(name,maxNameLen-1)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + name[maxNameLen-1]='\0'; \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_GET_HOSTNAME_BY_ADDRESS +* Purpose : get hostname by address +* Input : address - IP address (32bit, NOT network byte order!) +* maxNameLen - max. length of name +* Output : name - name (NUL terminated) +* result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +/* XXX NYI??? reentrant? */ +#ifndef TARGET_NATIVE_NETWORK_GET_HOSTNAME_BY_ADDRESS + #include <netdb.h> + #define TARGET_NATIVE_NETWORK_GET_HOSTNAME_BY_ADDRESS(address,name,maxNameLen,result) \ + do { \ + int __networkAddress; \ + struct hostent *__hostEntry; \ + \ + __networkAddress=htonl(address); \ + __hostEntry = gethostbyaddr((char*)&__networkAddress,sizeof(__networkAddress),AF_INET); \ + if (__hostEntry!=NULL) \ + { \ + strncpy(name,__hostEntry->h_name,maxNameLen-1); \ + name[maxNameLen]='\0'; \ + result=TARGET_NATIVE_OK; \ + } \ + else \ + { \ + result=TARGET_NATIVE_ERROR; \ + } \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_GET_HOSTNAME_BY_NAME +* Purpose : get hostname by name +* Input : name - hostname +* maxAddressSize - max. size of address array +* Output : addresses - host adddresses (array, NOT in network +* byte order!) +* addressCount - number of entries in address array +* result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +/* XXX NYI??? reentrant? */ +#ifndef TARGET_NATIVE_NETWORK_GET_HOSTNAME_BY_NAME + #include <netdb.h> + #define TARGET_NATIVE_NETWORK_GET_HOSTNAME_BY_NAME(name,addresses,maxAddressSize,addressCount,result) \ + do { \ + struct hostent *__hostEntry; \ + \ + addressCount=0; \ + \ + __hostEntry = gethostbyname(name); \ + if (__hostEntry!=NULL) \ + { \ + while ((addressCount<maxAddressSize) && (__hostEntry->h_addr_list[addressCount]!=NULL)) \ + { \ + addresses[addressCount]=ntohl(*(int*)(__hostEntry->h_addr_list[addressCount])); \ + addressCount++; \ + } \ + result=TARGET_NATIVE_OK; \ + } \ + else \ + { \ + result=TARGET_NATIVE_ERROR; \ + } \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_OPEN_STREAM +* Purpose : open stream socket +* Input : - +* Output : socketDescriptor - socket descriptor +* result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_OPEN_STREAM + #include <sys/types.h> + #include <sys/socket.h> + #include <fcntl.h> + #define TARGET_NATIVE_NETWORK_SOCKET_OPEN_STREAM(socketDescriptor,result) \ + do { \ + socketDescriptor=socket(AF_INET,SOCK_STREAM,0); \ + fcntl(socketDescriptor,F_SETFD,FD_CLOEXEC); \ + result=(socketDescriptor!=-1)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_OPEN_DATAGRAM +* Purpose : open datagram socket +* Input : - +* Output : socketDescriptor - socket descriptor +* result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_OPEN_DATAGRAM + #include <sys/types.h> + #include <sys/socket.h> + #include <fcntl.h> + #define TARGET_NATIVE_NETWORK_SOCKET_OPEN_DATAGRAM(socketDescriptor,result) \ + do { \ + socketDescriptor=socket(AF_INET,SOCK_DGRAM,0); \ + fcntl(socketDescriptor,F_SETFD,FD_CLOEXEC); \ + result=(socketDescriptor!=-1)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_CLOSE +* Purpose : close socket +* Input : socketDescriptor - socket descriptor +* Output : result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_CLOSE + #include <unistd.h> + #define TARGET_NATIVE_NETWORK_SOCKET_CLOSE(socketDescriptor,result) \ + do { \ + result=(close(socketDescriptor)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_CONNECT +* Purpose : connect socket +* Input : socketDescriptor - socket descriptor +* address - address (network format???) +* port - port number (NOT in network byte order!) +* Output : result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_CONNECT + #include <sys/types.h> + #include <sys/socket.h> + #include <netinet/in.h> + #define TARGET_NATIVE_NETWORK_SOCKET_CONNECT(socketDescriptor,address,port,result) \ + do { \ + struct sockaddr_in __socketAddress; \ + \ + memset(&__socketAddress,0,sizeof(__socketAddress)); \ + __socketAddress.sin_family = AF_INET; \ + __socketAddress.sin_addr.s_addr = htonl(address); \ + __socketAddress.sin_port = htons(((short)port)); \ + \ + result=(connect(socketDescriptor,(struct sockaddr*)&__socketAddress,sizeof(__socketAddress))==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_BIND +* Purpose : bind socket +* Input : socketDescriptor - socket descriptor +* address - address (NOT ??? in network byte order!) +* port - port (NOT in network byte order!) +* Output : result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +/* XXX ??? address in network byte order? */ +#ifndef TARGET_NATIVE_NETWORK_SOCKET_BIND + #include <sys/types.h> + #include <sys/socket.h> + #include <netinet/in.h> + #define TARGET_NATIVE_NETWORK_SOCKET_BIND(socketDescriptor,address,port,result) \ + do { \ + struct sockaddr_in __socketAddress; \ + \ + memset(&__socketAddress,0,sizeof(__socketAddress)); \ + __socketAddress.sin_family = AF_INET; \ + __socketAddress.sin_addr.s_addr = htonl(address); \ + __socketAddress.sin_port = htons(((short)port)); \ + \ + result=(bind(socketDescriptor,(struct sockaddr*)&__socketAddress,sizeof(__socketAddress))==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_LISTEN +* Purpose : listen socket +* Input : socketDescriptor - socket descriptor +* maxQueueLength - max. number of pending connections +* Output : result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +/* XXX ??? address in network byte order? */ +#ifndef TARGET_NATIVE_NETWORK_SOCKET_LISTEN + #include <sys/socket.h> + #define TARGET_NATIVE_NETWORK_SOCKET_LISTEN(socketDescriptor,maxQueueLength,result) \ + do { \ + result=(listen(socketDescriptor,maxQueueLength)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_ACCEPT +* Purpose : accept socket +* Input : socketDescriptor - socket descriptor +* Output : result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +/* XXX ??? address in network byte order? */ +#ifndef TARGET_NATIVE_NETWORK_SOCKET_ACCEPT + #include <sys/types.h> + #include <sys/socket.h> + #include <netinet/in.h> + #define TARGET_NATIVE_NETWORK_SOCKET_ACCEPT(socketDescriptor,newSocketDescriptor,result) \ + do { \ + struct sockaddr_in __socketAddress; \ + socklen_t __socketAddressLength; \ + \ + memset(&__socketAddress,0,sizeof(__socketAddress)); \ + __socketAddressLength=sizeof(__socketAddress); \ + newSocketDescriptor=accept(socketDescriptor,(struct sockaddr*)&__socketAddress,&__socketAddressLength); \ + result=(newSocketDescriptor!=-1)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_GET_LOCAL_INFO +* Purpose : get local socket data info +* Input : socketDescriptor - socket descriptor +* Output : localAddress - local address (NOT in network byte order!) +* localPort - local port number (NOT in network byte order!) +* result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_GET_LOCAL_INFO + #include <sys/socket.h> + #include <netinet/in.h> + #define TARGET_NATIVE_NETWORK_SOCKET_GET_LOCAL_INFO(socketDescriptor,localAddress,localPort,result) \ + do { \ + struct sockaddr_in __socketAddress; \ + socklen_t __socketAddressLength; \ + \ + localAddress=0; \ + localPort =0; \ + \ + __socketAddressLength=sizeof(__socketAddress); \ + result=(getsockname(socketDescriptor,(struct sockaddr*)&__socketAddress,&__socketAddressLength)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + if (result==TARGET_NATIVE_OK) \ + { \ + localAddress=ntohl(__socketAddress.sin_addr.s_addr); \ + localPort =ntohs(__socketAddress.sin_port); \ + } \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_GET_REMOTE_INFO +* Purpose : get remote socket data info +* Input : socketDescriptor - socket descriptor +* Output : remoteAddress - remote address (NOT in network byte order!) +* remotePort - remote port number (NOT in network byte order!) +* : result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_GET_REMOTE_INFO + #include <sys/socket.h> + #include <netinet/in.h> + #define TARGET_NATIVE_NETWORK_SOCKET_GET_REMOTE_INFO(socketDescriptor,remoteAddress,remotePort,result) \ + do { \ + struct sockaddr_in __socketAddress; \ + socklen_t __socketAddressLength; \ + \ + remoteAddress=0; \ + remotePort =0; \ + \ + __socketAddressLength=sizeof(__socketAddress); \ + result=(getpeername(socketDescriptor,(struct sockaddr*)&__socketAddress,&__socketAddressLength)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + if (result==TARGET_NATIVE_OK) \ + { \ + remoteAddress=ntohl(__socketAddress.sin_addr.s_addr); \ + remotePort =ntohs(__socketAddress.sin_port); \ + } \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_RECEIVE_AVAILABLE +* Purpose : get number of available bytes for receive +* Input : socketDescriptor - socket descriptor +* Output : bytesAvailable - available bytes for receive +* : result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_RECEIVE_AVAILABLE + #include <sys/ioctl.h> + #define TARGET_NATIVE_NETWORK_SOCKET_RECEIVE_AVAILABLE(socketDescriptor,bytesAvailable,result) \ + do { \ + int __value; \ + \ + bytesAvailable=0; \ + \ + result=(ioctl(socketDescriptor,FIONREAD,&__value)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + if (result==TARGET_NATIVE_OK) \ + { \ + bytesAvailable=__value; \ + } \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_RECEIVE +* Purpose : receive data from socket +* Input : socketDescriptor - socket descriptor +* maxLength - max. size of bfufer +* Output : buffer - received data +* bytesReceive - length of received data +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_RECEIVE + #include <sys/types.h> + #include <sys/socket.h> + #include <netinet/in.h> + #define TARGET_NATIVE_NETWORK_SOCKET_RECEIVE(socketDescriptor,buffer,maxLength,bytesReceived) \ + do { \ + struct sockaddr_in __socketAddress; \ + socklen_t __socketAddressLength; \ + \ + memset(&__socketAddress,0,sizeof(__socketAddress)); \ + __socketAddressLength=sizeof(__socketAddress); \ + bytesReceived=recv(socketDescriptor,buffer,maxLength,0); \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_RECEIVE_WITH_ADDRESS_PORT +* Purpose : receive data from socket +* Input : socketDescriptor - socket descriptor +* maxLength - max. size of bfufer +* Output : buffer - received data +* address - from address (NOT in network byte order!) +* port - from port (NOT in network byte order!) +* bytesReceive - length of received data +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_RECEIVE_WITH_ADDRESS_PORT + #include <sys/types.h> + #include <sys/socket.h> + #include <netinet/in.h> + #define TARGET_NATIVE_NETWORK_SOCKET_RECEIVE_WITH_ADDRESS_PORT(socketDescriptor,buffer,maxLength,address,port,bytesReceived) \ + do { \ + struct sockaddr_in __socketAddress; \ + socklen_t __socketAddressLength; \ + \ + port=0; \ + \ + memset(&__socketAddress,0,sizeof(__socketAddress)); \ + __socketAddressLength=sizeof(__socketAddress); \ + bytesReceived=recvfrom(socketDescriptor,buffer,maxLength,0,(struct sockaddr*)&__socketAddress,&__socketAddressLength); \ + if (__socketAddressLength==sizeof(__socketAddress)) \ + { \ + address=ntohl(__socketAddress.sin_addr.s_addr); \ + port =ntohs(__socketAddress.sin_port); \ + } \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_SEND +* Purpose : send data to socket +* Input : socketDescriptor - socket descriptor +* : buffer - data to send +* length - length of data to send +* Output : bytesSent - number of bytes sent, -1 otherwise +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_SEND + #include <sys/types.h> + #include <sys/socket.h> + #include <netinet/in.h> + #define TARGET_NATIVE_NETWORK_SOCKET_SEND(socketDescriptor,buffer,length,bytesSent) \ + do { \ + bytesSent=send(socketDescriptor,buffer,length,0); \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_SEND_WITH_ADDRESS_PORT +* Purpose : send data to socket +* Input : socketDescriptor - socket descriptor +* : buffer - data to send +* length - length of data to send +* Address - to address (NOT in network byte order!) +* Port - to port (NOT in network byte order!) +* Output : bytesSent - number of bytes sent, -1 otherwise +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_SEND_WITH_ADDRESS_PORT + #include <sys/types.h> + #include <sys/socket.h> + #include <netinet/in.h> + #define TARGET_NATIVE_NETWORK_SOCKET_SEND_WITH_ADDRESS_PORT(socketDescriptor,buffer,length,address,port,bytesSent) \ + do { \ + struct sockaddr_in __socketAddress; \ + \ + memset(&__socketAddress,0,sizeof(__socketAddress)); \ + __socketAddress.sin_family = AF_INET; \ + __socketAddress.sin_addr.s_addr = htonl(address); \ + __socketAddress.sin_port = htons((short)port); \ + bytesSent=sendto(socketDescriptor,buffer,length,0,(struct sockaddr*)&__socketAddress,sizeof(__socketAddress)); \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_TCP_NODELAY +* Purpose : set socket option TCP_NODELAY +* Input : socketDescriptor - socket descriptor +* flag - 1 or 0 +* Output : result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_TCP_NODELAY + #include <sys/types.h> + #include <sys/socket.h> + #include <netinet/tcp.h> + #define TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_TCP_NODELAY(socketDescriptor,flag,result) \ + do { \ + int __value; \ + \ + __value=flag; \ + result=(setsockopt(socketDescriptor,IPPROTO_TCP,TCP_NODELAY,&__value,sizeof(__value))==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_SO_LINGER +* Purpose : set socket option SO_LINGER +* Input : socketDescriptor - socket descriptor +* flag - 1 or 0 +* value - linger value +* Output : result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_SO_LINGER + #include <sys/types.h> + #include <sys/socket.h> + #define TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_SO_LINGER(socketDescriptor,flag,value,result) \ + do { \ + struct linger __linger; \ + \ + memset(&__linger,0,sizeof(__linger)); \ + if (flag) \ + { \ + __linger.l_onoff=0; \ + } \ + else \ + { \ + __linger.l_linger=value; \ + __linger.l_onoff =1; \ + } \ + result=(setsockopt(socketDescriptor,SOL_SOCKET,SO_LINGER,&__linger,sizeof(__linger))==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_SO_TIMEOUT +* Purpose : set socket option SO_TIMEOUT +* Input : socketDescriptor - socket descriptor +* flag - 1 or 0 +* Output : result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_SO_TIMEOUT + #include <sys/types.h> + #include <sys/socket.h> + #define TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_SO_TIMEOUT(socketDescriptor,flag,result) \ + do { \ + struct timeval __value; \ + \ + __value.tv_sec = flag / 1000; \ + __value.tv_usec = (flag % 1000) * 1000; \ + result=(setsockopt(socketDescriptor,SOL_SOCKET,SO_TIMEOUT,&__value,sizeof(__value))==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_SO_SNDBUF +* Purpose : set socket option SO_SNDBUF +* Input : socketDescriptor - socket descriptor +* size - size of send buffer +* Output : result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_SO_SNDBUF + #include <sys/types.h> + #include <sys/socket.h> + #define TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_SO_SNDBUF(socketDescriptor,size,result) \ + do { \ + int __value; \ + \ + __value=size; \ + result=(setsockopt(socketDescriptor,SOL_SOCKET,SO_SNDBUF,&__value,sizeof(__value))==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_SO_RCDBUF +* Purpose : set socket option SO_RCDBUF +* Input : socketDescriptor - socket descriptor +* size - size of receive buffer +* Output : result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_SO_RCDBUF + #include <sys/types.h> + #include <sys/socket.h> + #define TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_SO_RCDBUF(socketDescriptor,size,result) \ + do { \ + int __value; \ + \ + __value=size; \ + result=(setsockopt(socketDescriptor,SOL_SOCKET,SO_RCVBUF,&__value,sizeof(__value))==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_IP_TTL +* Purpose : set socket option IP_TTL +* Input : socketDescriptor - socket descriptor +* value - value +* Output : result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_IP_TTL + #include <sys/types.h> + #include <sys/socket.h> + #include <netinet/in.h> + #define TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_IP_TTL(socketDescriptor,value,result) \ + do { \ + int __value; \ + \ + __value=value; \ + result=(setsockopt(socketDescriptor,IPPROTO_IP,IP_TTL,&__value,sizeof(__value))==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_IP_MULTICAST_IF +* Purpose : set socket option IP_MULTICAST_IF +* Input : socketDescriptor - socket descriptor +* address - integer with IP address in host-format +* Output : result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_IP_MULTICAST_IF + #include <sys/types.h> + #include <sys/socket.h> + #include <netinet/in.h> + #define TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_IP_MULTICAST_IF(socketDescriptor,address,result) \ + do { \ + struct sockaddr_in __socketAddress; \ + \ + memset(&__socketAddress,0,sizeof(__socketAddress)); \ + __socketAddress.sin_family = AF_INET; \ + __socketAddress.sin_addr.s_addr = htonl(address); \ + result=(setsockopt(socketDescriptor,IPPROTO_IP,IP_MULTICAST_IF,&__socketAddress,sizeof(__socketAddress))==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_REUSE_ADDRESS +* Purpose : set socket option REUSE_ADDRESS +* Input : socketDescriptor - socket descriptor +* flag - 1 or 0 +* Output : result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_REUSE_ADDRESS + #include <sys/types.h> + #include <sys/socket.h> + #include <netinet/in.h> + #define TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_REUSE_ADDRESS(socketDescriptor,flag,result) \ + do { \ + int __value; \ + \ + __value=flag; \ + result=(setsockopt(socketDescriptor,SOL_SOCKET,SO_REUSEADDR,&__value,sizeof(__value))==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_ADD_MEMBERSHIP +* Purpose : set socket option IP_ADD_MEMBERSHIP +* Input : socketDescriptor - socket descriptor +* address - network address (host-format) +* Output : result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_ADD_MEMBERSHIP + #include <sys/types.h> + #include <sys/socket.h> + #include <netinet/in.h> + #define TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_ADD_MEMBERSHIP(socketDescriptor,address,result) \ + do { \ + struct ip_mreq __request; \ + \ + memset(&__request,0,sizeof(__request)); \ + __request.imr_multiaddr.s_addr=htonl(address); \ + __request.imr_interface.s_addr=INADDR_ANY; \ + result=(setsockopt(socketDescriptor,IPPROTO_IP,IP_ADD_MEMBERSHIP,&__request,sizeof(__request))==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_DROP_MEMBERSHIP +* Purpose : set socket option IP_DROP_MEMBERSHIP +* Input : socketDescriptor - socket descriptor +* address - network address (host-format) +* Output : result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_DROP_MEMBERSHIP + #include <sys/types.h> + #include <sys/socket.h> + #include <netinet/in.h> + #define TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_DROP_MEMBERSHIP(socketDescriptor,address,result) \ + do { \ + struct ip_mreq __request; \ + \ + memset(&__request,0,sizeof(__request)); \ + __request.imr_multiaddr.s_addr=htonl(address); \ + __request.imr_interface.s_addr=INADDR_ANY; \ + result=(setsockopt(socketDescriptor,IPPROTO_IP,IP_DROP_MEMBERSHIP,&__request,sizeof(__request))==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_KEEP_ALIVE +* Purpose : set socket option KEEP_ALIVE +* Input : socketDescriptor - socket descriptor +* flag - 1 or 0 +* Output : result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_KEEP_ALIVE + #include <sys/types.h> + #include <sys/socket.h> + #include <netinet/in.h> + #define TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_KEEP_ALIVE(socketDescriptor,flag,result) \ + do { \ + int __value; \ + \ + __value=flag; \ + result=(setsockopt(socketDescriptor,SOL_SOCKET,SO_KEEPALIVE,&__value,sizeof(__value))==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_BROADCAST +* Purpose : set socket option SO_BROADCAST +* Input : socketDescriptor - socket descriptor +* flag - 1 or 0 +* Output : result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_BROADCAST + #include <sys/types.h> + #include <sys/socket.h> + #include <netinet/tcp.h> + #define TARGET_NATIVE_NETWORK_SOCKET_SET_OPTION_BROADCAST(socketDescriptor,flag,result) \ + do { \ + int __value; \ + \ + __value=flag; \ + result=(setsockopt(socketDescriptor,SOL_SOCKET,SO_BROADCAST,&__value,sizeof(__value))==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + } while (0) +#endif + +/*---------------------------------------------------------------------*/ + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_TCP_NODELAY +* Purpose : get socket option TCP_NODELAY +* Input : socketDescriptor - socket descriptor +* Output : flag - 1 or 0 +* result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_TCP_NODELAY + #include <sys/types.h> + #include <sys/socket.h> + #include <netinet/tcp.h> + #define TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_TCP_NODELAY(socketDescriptor,flag,result) \ + do { \ + int __value; \ + socklen_t __len; \ + \ + flag=0; \ + \ + __len=sizeof(__value); \ + result=(getsockopt(socketDescriptor,IPPROTO_TCP,TCP_NODELAY,&__value,&__len)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + if (result==TARGET_NATIVE_OK) \ + { \ + flag=__value; \ + } \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_SO_LINGER +* Purpose : get socket option SO_LINGER +* Input : socketDescriptor - socket descriptor +* Output : flag - 1 or 0 +* value - linger value +* result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_SO_LINGER + #include <sys/types.h> + #include <sys/socket.h> + #define TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_SO_LINGER(socketDescriptor,flag,value,result) \ + do { \ + struct linger __linger; \ + socklen_t __len; \ + \ + flag =0; \ + value=0; \ + \ + __len=sizeof(__linger); \ + result=(getsockopt(socketDescriptor,SOL_SOCKET,SO_LINGER,&__linger,&__len)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + if (result==TARGET_NATIVE_OK) \ + { \ + flag =__linger.l_onoff; \ + value=__linger.l_linger; \ + } \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_SO_TIMEOUT +* Purpose : get socket option SO_TIMEOUT +* Input : socketDescriptor - socket descriptor +* Output : flag - 1 or 0 +* result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_SO_TIMEOUT + #include <sys/types.h> + #include <sys/socket.h> + #define TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_SO_TIMEOUT(socketDescriptor,flag,result) \ + do { \ + struct timeval __value; \ + socklen_t __len; \ + \ + flag=0; \ + \ + __len=sizeof(__value); \ + result=(getsockopt(socketDescriptor,SOL_SOCKET,SO_TIMEOUT,&__value,&__len)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + if (result==TARGET_NATIVE_OK) \ + { \ + flag = (__value.tv_sec * 1000LL) + (__value.tv_usec / 1000LL); \ + } \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_SO_SNDBUF +* Purpose : get socket option SO_SNDBUF +* Input : socketDescriptor - socket descriptor +* Output : size - size of send buffer +* result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_SO_SNDBUF + #include <sys/types.h> + #include <sys/socket.h> + #define TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_SO_SNDBUF(socketDescriptor,size,result) \ + do { \ + int __value; \ + socklen_t __len; \ + \ + size=0; \ + \ + __len=sizeof(__value); \ + result=(getsockopt(socketDescriptor,SOL_SOCKET,SO_SNDBUF,&__value,&__len)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + if (result==TARGET_NATIVE_OK) \ + { \ + size=__value; \ + } \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_SO_RCDBUF +* Purpose : get socket option SO_RCDBUF +* Input : socketDescriptor - socket descriptor +* Output : size - size of receive buffer +* result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_SO_RCDBUF + #include <sys/types.h> + #include <sys/socket.h> + #define TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_SO_RCDBUF(socketDescriptor,size,result) \ + do { \ + int __value; \ + socklen_t __len; \ + \ + size=0; \ + \ + __len=sizeof(__value); \ + result=(getsockopt(socketDescriptor,SOL_SOCKET,SO_RCVBUF,&__value,&__len)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + if (result==TARGET_NATIVE_OK) \ + { \ + size=__value; \ + } \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_IP_TTL +* Purpose : get socket option IP_TTL +* Input : socketDescriptor - socket descriptor +* Output : flag - 1 or 0 +* result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_IP_TTL + #include <sys/types.h> + #include <sys/socket.h> + #include <netinet/in.h> + #define TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_IP_TTL(socketDescriptor,flag,result) \ + do { \ + int __value; \ + socklen_t __len; \ + \ + flag=0; \ + \ + __len=sizeof(__value); \ + result=(getsockopt(socketDescriptor,IPPROTO_IP,IP_TTL,&__value,&__len)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + if (result==TARGET_NATIVE_OK) \ + { \ + flag=__value; \ + } \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_IP_MULTICAST_IF +* Purpose : get socket option IP_MULTICAST_IF +* Input : socketDescriptor - socket descriptor +* Output : address - integer with IP address in host-format +* result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_IP_MULTICAST_IF + #include <sys/types.h> + #include <sys/socket.h> + #include <netinet/in.h> + #define TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_IP_MULTICAST_IF(socketDescriptor,address,result) \ + do { \ + struct sockaddr_in __socketAddress; \ + socklen_t __socketAddressLength; \ + \ + address=0;\ + \ + memset(&__socketAddress,0,sizeof(__socketAddress)); \ + __socketAddress.sin_family = AF_INET; \ + __socketAddress.sin_addr.s_addr = htonl(address); \ + __socketAddressLength=sizeof(__socketAddress); \ + result=(getsockopt(socketDescriptor,IPPROTO_IP,IP_MULTICAST_IF,&__socketAddress,&__socketAddressLength)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + if (result==TARGET_NATIVE_OK) \ + { \ + address=ntohl(__socketAddress.sin_addr.s_addr); \ + } \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_BIND_ADDRESS +* Purpose : get socket option SOCKOPT_SO_BINDADDR +* Input : socketDescriptor - socket descriptor +* Output : address - integer with IP address in host-format +* result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_BIND_ADDRESS + #include <sys/types.h> + #include <sys/socket.h> + #include <netinet/in.h> + #define TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_BIND_ADDRESS(socketDescriptor,address,result) \ + do { \ + struct sockaddr_in __socketAddress; \ + socklen_t __socketAddressLength; \ + \ + address=0;\ + \ + memset(&__socketAddress,0,sizeof(__socketAddress)); \ + __socketAddressLength=sizeof(__socketAddress); \ + result=(getsockname(socketDescriptor,(struct sockaddr*)&__socketAddress,&__socketAddressLength)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + if (result==TARGET_NATIVE_OK) \ + { \ + address=ntohl(__socketAddress.sin_addr.s_addr); \ + } \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_REUSE_ADDRESS +* Purpose : get socket option REUSE_ADDRESS +* Input : socketDescriptor - socket descriptor +* Output : flag - 1 or 0 +* result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_REUSE_ADDRESS + #include <sys/types.h> + #include <sys/socket.h> + #include <netinet/in.h> + #define TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_REUSE_ADDRESS(socketDescriptor,flag,result) \ + do { \ + int __value; \ + socklen_t __len; \ + \ + flag=0; \ + \ + __len=sizeof(__value); \ + result=(getsockopt(socketDescriptor,SOL_SOCKET,SO_REUSEADDR,&__value,&__len)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + if (result==TARGET_NATIVE_OK) \ + { \ + flag=__value; \ + } \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_KEEP_ALIVE +* Purpose : get socket option KEEP_ALIVE +* Input : socketDescriptor - socket descriptor +* Output : flag - 1 or 0 +* result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_KEEP_ALIVE + #include <sys/types.h> + #include <sys/socket.h> + #include <netinet/in.h> + #define TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_KEEP_ALIVE(socketDescriptor,flag,result) \ + do { \ + int __value; \ + socklen_t __len; \ + \ + flag=0; \ + \ + __len=sizeof(__value); \ + result=(getsockopt(socketDescriptor,SOL_SOCKET,SO_KEEPALIVE,&__value,&__len)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + if (result==TARGET_NATIVE_OK) \ + { \ + flag=__value; \ + } \ + } while (0) +#endif + +/***********************************************************************\ +* Name : TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_BROADCAST +* Purpose : get socket option SO_BROADCAST +* Input : socketDescriptor - socket descriptor +* Output : flag - 1 or 0 +* result - TARGET_NATIVE_OK if no error occurred, +* TARGET_NATIVE_ERROR otherwise +* Return : - +* Side-effect: unknown +* Notes : - +\***********************************************************************/ + +#ifndef TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_BROADCAST + #include <sys/types.h> + #include <sys/socket.h> + #include <netinet/tcp.h> + #define TARGET_NATIVE_NETWORK_SOCKET_GET_OPTION_BROADCAST(socketDescriptor,flag,result) \ + do { \ + int __value; \ + socklen_t __len; \ + \ + flag=0; \ + \ + __len=sizeof(__value); \ + result=(getsockopt(socketDescriptor,SOL_SOCKET,SO_BROADCAST,&__value,&__len)==0)?TARGET_NATIVE_OK:TARGET_NATIVE_ERROR; \ + if (result==TARGET_NATIVE_OK) \ + { \ + flag=__value; \ + } \ + } while (0) +#endif + +/***************************** Functions *******************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* __TARGET_GENERIC_NETWORK__ */ + +/* end of file */ + |