| /* 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> |
| #if TIME_WITH_SYS_TIME |
| # include <sys/time.h> |
| # include <time.h> |
| #else |
| # if HAVE_SYS_TIME_H |
| # include <sys/time.h> |
| # else |
| # include <time.h> |
| # endif |
| #endif |
| #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_SNDTIMEO, &__value, sizeof(__value)) | \ |
| setsockopt(socketDescriptor, SOL_SOCKET, SO_RCVTIMEO, &__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 */ |
| |