socket.h
上传用户:gzpyjq
上传日期:2013-01-31
资源大小:1852k
文件大小:3k
源码类别:

手机WAP编程

开发平台:

WINDOWS

  1. /*
  2.  * General useful socket functions
  3.  */
  4. #ifndef GW_SOCKET_H
  5. #define GW_SOCKET_H
  6. #include <stddef.h>
  7. #include <stdio.h>
  8. #include <sys/types.h>
  9. #include <netinet/in.h>
  10. #include <config.h>
  11. #ifndef HAVE_SOCKLEN_T
  12. typedef int socklen_t;
  13. #endif
  14. #include "octstr.h"
  15. /* Return the official and fully qualified domain name of the host. 
  16.    Caller should treat this as read-only. Caller MUST NOT destroy it. */
  17. Octstr *get_official_name(void);
  18. /* Return an official IP number for the host. Caller should treat this 
  19.    as read-only. Caller MUST NOT destroy it. Note that there can be
  20.    multiple official IP numbers for the host.
  21.    */
  22. Octstr *get_official_ip(void);
  23. /* Open a server socket. Return -1 for error, >= 0 socket number for OK.*/
  24. int make_server_socket(int port, const char *interface_name);
  25. /* Open a client socket. */
  26. int tcpip_connect_to_server(char *hostname, int port, const char *interface_name);
  27. /* As above, but binds our end to 'our_port' */
  28. int tcpip_connect_to_server_with_port(char *hostname, int port, int our_port,
  29. const char *interface_name);
  30. /* Write string to socket. */
  31. int write_to_socket(int socket, char *str);
  32. /* Set socket to blocking or non-blocking mode.  Return -1 for error,
  33.  * 0 for success. */
  34. int socket_set_blocking(int socket, int blocking);
  35. /* Check if there is something to be read in 'fd'. Return 1 if there
  36.  * is data, 0 otherwise, -1 on error */
  37. int read_available(int fd, long wait_usec);
  38. /*
  39.  * Create a UDP socket for receiving from clients. Return -1 for failure,
  40.  * a socket file descriptor >= 0 for OK.
  41.  */
  42. int udp_bind(int port, const char *interface_name);
  43. /*
  44.  * Create the client end of a UDP socket (i.e., a UDP socket that can
  45.  * be on any port). Return -1 for failure, a socket file descriptor >= 0 
  46.  * for OK.
  47.  */
  48. int udp_client_socket(void);
  49. /*
  50.  * Encode a hostname or IP number and port number into a binary address,
  51.  * and return that as an Octstr. Return NULL if the host doesn't exist
  52.  * or the IP number is syntactically invalid, or the port is bad.
  53.  */
  54. Octstr *udp_create_address(Octstr *host_or_ip, int port);
  55. /*
  56.  * Return the IP number of an encoded binary address, as a cleartext string.
  57.  */
  58. Octstr *udp_get_ip(Octstr *addr);
  59. /*
  60.  * Return the port number of an encoded binary address, as a cleartext string.
  61.  */
  62. int udp_get_port(Octstr *addr);
  63. /*
  64.  * Send a UDP message to a given server.
  65.  */
  66. int udp_sendto(int s, Octstr *datagram, Octstr *addr);
  67. /*
  68.  * Receive a UDP message from a client.
  69.  */
  70. int udp_recvfrom(int s, Octstr **datagram, Octstr **addr);
  71. /*
  72.  * Create an Octstr of character representation of an IP
  73.  */
  74. Octstr *host_ip(struct sockaddr_in addr);
  75. /*
  76.  * This must be called before sockets are used. gwlib_init does that
  77.  */
  78. void socket_init(void);
  79. /*
  80.  * Likewise, shutdown, called by gwlib_shutdown
  81.  */
  82. void socket_shutdown(void);
  83. /*
  84.  *  Converts an address of various types to an Octstr representation.
  85.  *  Similar to host_ip, but works with more than IPv4
  86.  */
  87. Octstr *gw_netaddr_to_octstr(int af, void* src);
  88. /*
  89.  * Do an accept() system call for the given file descriptor. Return -1
  90.  * for error (from accept or gwthread_poll, or gwthread_poll was 
  91.  * interrupted by gwthread_wakeup) or the new file descriptor for success. 
  92.  * Return IP number (as formatted by host_ip) via *client_addr.
  93.  */
  94. int gw_accept(int fd, Octstr **client_addr);
  95. #endif