00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040 #include <stdlib.h>
00041 #include <sys/poll.h>
00042
00043 #include "IPClient.h"
00044 #include "util/Random.h"
00045
00046 namespace oasys {
00047
00048 IPClient::IPClient(int socktype, const char* logbase, Notifier* intr)
00049 : IOHandlerBase(intr), IPSocket(socktype, logbase)
00050 {}
00051
00052 IPClient::IPClient(int socktype, int sock,
00053 in_addr_t remote_addr, u_int16_t remote_port,
00054 const char* logbase, Notifier* intr)
00055 : IOHandlerBase(intr),
00056 IPSocket(socktype, sock, remote_addr, remote_port, logbase)
00057 {}
00058
00059 IPClient::~IPClient() {}
00060
00061 int
00062 IPClient::read(char* bp, size_t len)
00063 {
00064
00065
00066 #ifdef TEST_SHORT_READ
00067 if (len > 64) {
00068 int rnd = Random::rand(len);
00069 ::logf("/test/shortread", LOG_DEBUG, "read(%d) -> read(%d)", len, rnd);
00070 len = rnd;
00071 }
00072 #endif
00073
00074 int cc = IO::read(fd_, bp, len, get_notifier(), logpath_);
00075 monitor(IO::READV, 0);
00076
00077 return cc;
00078 }
00079
00080 int
00081 IPClient::readv(const struct iovec* iov, int iovcnt)
00082 {
00083 int cc = IO::readv(fd_, iov, iovcnt, get_notifier(), logpath_);
00084 monitor(IO::READV, 0);
00085
00086 return cc;
00087 }
00088
00089 int
00090 IPClient::write(const char* bp, size_t len)
00091 {
00092 int cc = IO::write(fd_, bp, len, get_notifier(), logpath_);
00093 monitor(IO::WRITEV, 0);
00094
00095 return cc;
00096 }
00097
00098 int
00099 IPClient::writev(const struct iovec* iov, int iovcnt)
00100 {
00101 int cc = IO::writev(fd_, iov, iovcnt, get_notifier(), logpath_);
00102 monitor(IO::WRITEV, 0);
00103
00104 return cc;
00105 }
00106
00107 int
00108 IPClient::readall(char* bp, size_t len)
00109 {
00110 int cc = IO::readall(fd_, bp, len, get_notifier(), logpath_);
00111 monitor(IO::READV, 0);
00112
00113 return cc;
00114 }
00115
00116 int
00117 IPClient::writeall(const char* bp, size_t len)
00118 {
00119 int cc = IO::writeall(fd_, bp, len, get_notifier(), logpath_);
00120 monitor(IO::WRITEV, 0);
00121
00122 return cc;
00123 }
00124
00125 int
00126 IPClient::readvall(const struct iovec* iov, int iovcnt)
00127 {
00128 int cc = IO::readvall(fd_, iov, iovcnt, get_notifier(), logpath_);
00129 monitor(IO::READV, 0);
00130
00131 return cc;
00132 }
00133
00134 int
00135 IPClient::writevall(const struct iovec* iov, int iovcnt)
00136 {
00137 int cc = IO::writevall(fd_, iov, iovcnt, get_notifier(), logpath_);
00138 monitor(IO::WRITEV, 0);
00139
00140 return cc;
00141 }
00142
00143 int
00144 IPClient::timeout_read(char* bp, size_t len, int timeout_ms)
00145 {
00146 int cc = IO::timeout_read(fd_, bp, len, timeout_ms,
00147 get_notifier(), logpath_);
00148 monitor(IO::READV, 0);
00149
00150 return cc;
00151 }
00152
00153 int
00154 IPClient::timeout_readv(const struct iovec* iov, int iovcnt, int timeout_ms)
00155 {
00156 int cc = IO::timeout_readv(fd_, iov, iovcnt, timeout_ms,
00157 get_notifier(), logpath_);
00158 monitor(IO::READV, 0);
00159
00160 return cc;
00161 }
00162
00163 int
00164 IPClient::timeout_readall(char* bp, size_t len, int timeout_ms)
00165 {
00166 int cc = IO::timeout_readall(fd_, bp, len, timeout_ms,
00167 get_notifier(), logpath_);
00168 monitor(IO::READV, 0);
00169
00170 return cc;
00171 }
00172
00173 int
00174 IPClient::timeout_readvall(const struct iovec* iov, int iovcnt, int timeout_ms)
00175 {
00176 int cc = IO::timeout_readvall(fd_, iov, iovcnt, timeout_ms,
00177 get_notifier(), logpath_);
00178 monitor(IO::READV, 0);
00179
00180 return cc;
00181 }
00182
00183 int
00184 IPClient::timeout_write(const char* bp, size_t len, int timeout_ms)
00185 {
00186 int cc = IO::timeout_write(fd_, bp, len, timeout_ms,
00187 get_notifier(), logpath_);
00188 monitor(IO::WRITEV, 0);
00189
00190 return cc;
00191 }
00192
00193 int
00194 IPClient::timeout_writev(const struct iovec* iov, int iovcnt, int timeout_ms)
00195 {
00196 int cc = IO::timeout_writev(fd_, iov, iovcnt, timeout_ms,
00197 get_notifier(), logpath_);
00198 monitor(IO::WRITEV, 0);
00199
00200 return cc;
00201 }
00202
00203 int
00204 IPClient::timeout_writeall(const char* bp, size_t len, int timeout_ms)
00205 {
00206 int cc = IO::timeout_writeall(fd_, bp, len, timeout_ms,
00207 get_notifier(), logpath_);
00208 monitor(IO::WRITEV, 0);
00209
00210 return cc;
00211 }
00212
00213 int
00214 IPClient::timeout_writevall(const struct iovec* iov, int iovcnt, int timeout_ms)
00215 {
00216 int cc = IO::timeout_writevall(fd_, iov, iovcnt, timeout_ms,
00217 get_notifier(), logpath_);
00218 monitor(IO::WRITEV, 0);
00219
00220 return cc;
00221 }
00222
00223 int
00224 IPClient::get_nonblocking(bool *nonblockingp)
00225 {
00226 int cc = IO::get_nonblocking(fd_, nonblockingp, logpath_);
00227 return cc;
00228 }
00229
00230 int
00231 IPClient::set_nonblocking(bool nonblocking)
00232 {
00233 int cc = IO::set_nonblocking(fd_, nonblocking, logpath_);
00234 return cc;
00235 }
00236
00237 }