Marco Hsu / WIFI_API_32kRAM
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Socket.h Source File

Socket.h

00001 /* Copyright (C) 2012 mbed.org, MIT License
00002  *
00003  * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
00004  * and associated documentation files (the "Software"), to deal in the Software without restriction,
00005  * including without limitation the rights to use, copy, modify, merge, publish, distribute,
00006  * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
00007  * furnished to do so, subject to the following conditions:
00008  *
00009  * The above copyright notice and this permission notice shall be included in all copies or
00010  * substantial portions of the Software.
00011  *
00012  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
00013  * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
00014  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
00015  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
00016  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
00017  */
00018 #ifndef SOCKET_H_
00019 #define SOCKET_H_
00020 
00021 //#include "lwip/sockets.h"
00022 //#include "lwip/netdb.h"
00023 
00024 //following are added by Tsungta
00025 #include <stddef.h> /* for size_t */ 
00026 #include "stdint.h"
00027 #define socklen_t uint32_t
00028 //Tsungta
00029 
00030 struct timeval {
00031   long    tv_sec;         /* seconds */
00032   long    tv_usec;        /* and microseconds */
00033 };
00034 
00035 //DNS
00036 inline struct hostent *gethostbyname(const char *name) {
00037 //  return lwip_gethostbyname(name);
00038         return 0;
00039 }
00040 
00041 inline int gethostbyname_r(const char *name, struct hostent *ret, char *buf, size_t buflen, struct hostent **result, int *h_errnop) {
00042 //  return lwip_gethostbyname_r(name, ret, buf, buflen, result, h_errnop);
00043         return 0;
00044     
00045 }
00046 
00047 class TimeInterval;
00048 
00049 /** Socket file descriptor and select wrapper
00050   */
00051 class Socket {
00052 public:
00053     /** Socket
00054      */
00055     Socket();
00056     
00057     /** Set blocking or non-blocking mode of the socket and a timeout on
00058         blocking socket operations
00059     \param blocking  true for blocking mode, false for non-blocking mode.
00060     \param timeout   timeout in ms [Default: (1500)ms].
00061     */
00062     void set_blocking(bool blocking, unsigned int timeout=1500);
00063     
00064 //    /** Set socket options
00065 //    \param level     stack level (see: lwip/sockets.h)
00066 //    \param optname   option ID
00067 //    \param optval    option value
00068 //    \param socklen_t length of the option value
00069 //    \return 0 on success, -1 on failure
00070 //    */
00071 //    int set_option(int level, int optname, const void *optval, socklen_t optlen);
00072 //    
00073 //    /** Get socket options
00074 //        \param level     stack level (see: lwip/sockets.h)
00075 //        \param optname   option ID
00076 //        \param optval    buffer pointer where to write the option value
00077 //        \param socklen_t length of the option value
00078 //        \return 0 on success, -1 on failure
00079 //        */
00080 //    int get_option(int level, int optname, void *optval, socklen_t *optlen);
00081     
00082     /** Close the socket
00083         \param shutdown   free the left-over data in message queues
00084      */
00085     int close(bool shutdown=true);
00086     
00087     ~Socket();
00088     
00089 protected:
00090     int _sock_fd;
00091     int init_socket(int type);
00092     
00093     int wait_readable(TimeInterval& timeout);
00094     int wait_writable(TimeInterval& timeout);
00095     
00096     bool _blocking;
00097     unsigned int _timeout;
00098     
00099 private:
00100     int select(struct timeval *timeout, bool read, bool write);
00101 };
00102 
00103 /** Time interval class used to specify timeouts
00104  */
00105 class TimeInterval {
00106     friend class Socket;
00107 
00108 public:
00109     /** Time Interval
00110      \param ms time interval expressed in milliseconds
00111       */
00112     TimeInterval(unsigned int ms);
00113     
00114 private:
00115     struct timeval _time;
00116 };
00117 
00118 #endif /* SOCKET_H_ */