comparison src/os/linux/vm/os_linux.inline.hpp @ 4717:11c26bfcf8c7

7091417: recvfrom's 6th input should be of type socklen_t Summary: Revamp class os's socket method formal args to match socket.h, insert casts in appropriate places, and copyin-copyout int*'s that s/b socklen_t*'s in jvm.cpp. Reviewed-by: coleenp, dholmes Contributed-by: erik.gahlin@oracle.com, rickard.backman@oracle.com, nils.loodin@oracle.com, markus.gronlund@oracle.com
author phh
date Wed, 21 Dec 2011 15:48:16 -0500
parents 1d1603768966
children d2a62e0f25eb
comparison
equal deleted inserted replaced
4716:4502fd5c7698 4717:11c26bfcf8c7
200 200
201 inline int os::socket(int domain, int type, int protocol) { 201 inline int os::socket(int domain, int type, int protocol) {
202 return ::socket(domain, type, protocol); 202 return ::socket(domain, type, protocol);
203 } 203 }
204 204
205 inline int os::recv(int fd, char *buf, int nBytes, int flags) { 205 inline int os::recv(int fd, char* buf, size_t nBytes, uint flags) {
206 RESTARTABLE_RETURN_INT(::recv(fd, buf, nBytes, (unsigned int) flags)); 206 RESTARTABLE_RETURN_INT(::recv(fd, buf, nBytes, flags));
207 } 207 }
208 208
209 inline int os::send(int fd, char *buf, int nBytes, int flags) { 209 inline int os::send(int fd, char* buf, size_t nBytes, uint flags) {
210 RESTARTABLE_RETURN_INT(::send(fd, buf, nBytes, (unsigned int) flags)); 210 RESTARTABLE_RETURN_INT(::send(fd, buf, nBytes, flags));
211 } 211 }
212 212
213 inline int os::raw_send(int fd, char *buf, int nBytes, int flags) { 213 inline int os::raw_send(int fd, char* buf, size_t nBytes, uint flags) {
214 return os::send(fd, buf, nBytes, flags); 214 return os::send(fd, buf, nBytes, flags);
215 } 215 }
216 216
217 inline int os::timeout(int fd, long timeout) { 217 inline int os::timeout(int fd, long timeout) {
218 julong prevtime,newtime; 218 julong prevtime,newtime;
248 248
249 inline int os::listen(int fd, int count) { 249 inline int os::listen(int fd, int count) {
250 return ::listen(fd, count); 250 return ::listen(fd, count);
251 } 251 }
252 252
253 inline int os::connect(int fd, struct sockaddr *him, int len) { 253 inline int os::connect(int fd, struct sockaddr* him, socklen_t len) {
254 RESTARTABLE_RETURN_INT(::connect(fd, him, len)); 254 RESTARTABLE_RETURN_INT(::connect(fd, him, len));
255 } 255 }
256 256
257 inline int os::accept(int fd, struct sockaddr *him, int *len) { 257 inline int os::accept(int fd, struct sockaddr* him, socklen_t* len) {
258 // This cast is from int to unsigned int on linux. Since we 258 // Linux doc says this can't return EINTR, unlike accept() on Solaris.
259 // only pass the parameter "len" around the vm and don't try to 259 // But see attachListener_linux.cpp, LinuxAttachListener::dequeue().
260 // fetch it's value, this cast is safe for now. The java.net group 260 return (int)::accept(fd, him, len);
261 // may need and want to change this interface someday if socklen_t goes 261 }
262 // to 64 bits on some platform that we support. 262
263 // Linux doc says this can't return EINTR, unlike accept() on Solaris 263 inline int os::recvfrom(int fd, char* buf, size_t nBytes, uint flags,
264 264 sockaddr* from, socklen_t* fromlen) {
265 return ::accept(fd, him, (socklen_t *)len); 265 RESTARTABLE_RETURN_INT((int)::recvfrom(fd, buf, nBytes, flags, from, fromlen));
266 } 266 }
267 267
268 inline int os::recvfrom(int fd, char *buf, int nBytes, int flags, 268 inline int os::sendto(int fd, char* buf, size_t len, uint flags,
269 sockaddr *from, int *fromlen) { 269 struct sockaddr* to, socklen_t tolen) {
270 RESTARTABLE_RETURN_INT(::recvfrom(fd, buf, nBytes, (unsigned int) flags, from, (socklen_t *)fromlen)); 270 RESTARTABLE_RETURN_INT((int)::sendto(fd, buf, len, flags, to, tolen));
271 } 271 }
272 272
273 inline int os::sendto(int fd, char *buf, int len, int flags, 273 inline int os::socket_shutdown(int fd, int howto) {
274 struct sockaddr *to, int tolen) {
275 RESTARTABLE_RETURN_INT(::sendto(fd, buf, len, (unsigned int) flags, to, tolen));
276 }
277
278 inline int os::socket_shutdown(int fd, int howto){
279 return ::shutdown(fd, howto); 274 return ::shutdown(fd, howto);
280 } 275 }
281 276
282 inline int os::bind(int fd, struct sockaddr *him, int len){ 277 inline int os::bind(int fd, struct sockaddr* him, socklen_t len) {
283 return ::bind(fd, him, len); 278 return ::bind(fd, him, len);
284 } 279 }
285 280
286 inline int os::get_sock_name(int fd, struct sockaddr *him, int *len){ 281 inline int os::get_sock_name(int fd, struct sockaddr* him, socklen_t* len) {
287 return ::getsockname(fd, him, (socklen_t *)len); 282 return ::getsockname(fd, him, len);
288 } 283 }
289 284
290 inline int os::get_host_name(char* name, int namelen){ 285 inline int os::get_host_name(char* name, int namelen) {
291 return ::gethostname(name, namelen); 286 return ::gethostname(name, namelen);
292 } 287 }
293 288
294 inline struct hostent* os::get_host_by_name(char* name) { 289 inline struct hostent* os::get_host_by_name(char* name) {
295 return ::gethostbyname(name); 290 return ::gethostbyname(name);
296 } 291 }
292
297 inline int os::get_sock_opt(int fd, int level, int optname, 293 inline int os::get_sock_opt(int fd, int level, int optname,
298 char *optval, int* optlen){ 294 char* optval, socklen_t* optlen) {
299 return ::getsockopt(fd, level, optname, optval, (socklen_t *)optlen); 295 return ::getsockopt(fd, level, optname, optval, optlen);
300 } 296 }
301 297
302 inline int os::set_sock_opt(int fd, int level, int optname, 298 inline int os::set_sock_opt(int fd, int level, int optname,
303 const char *optval, int optlen){ 299 const char* optval, socklen_t optlen) {
304 return ::setsockopt(fd, level, optname, optval, optlen); 300 return ::setsockopt(fd, level, optname, optval, optlen);
305 } 301 }
306 #endif // OS_LINUX_VM_OS_LINUX_INLINE_HPP 302 #endif // OS_LINUX_VM_OS_LINUX_INLINE_HPP