Changeset 21249
- Timestamp:
- 10/13/08 20:42:16 (5 years ago)
- Location:
- lang/cplusplus/llv8call/trunk
- Files:
-
- 1 added
- 1 modified
-
ext/socket/socket.cc (modified) (4 diffs)
-
t/100_socket/06_socketpair.js (added)
Legend:
- Unmodified
- Added
- Removed
-
lang/cplusplus/llv8call/trunk/ext/socket/socket.cc
r21248 r21249 160 160 FUNCTION(_open) 161 161 // USAGE: new Socket(Socket.AF_INET, Socket.SOCK_STREAM) 162 if (args.Length() == 2&& args[0]->IsExternal()) {162 if (args.Length() == 5 && args[0]->IsExternal()) { 163 163 args.This()->SetInternalField(0, args[1]); 164 164 args.This()->Set(String::New("family"), args[2]); … … 240 240 int newsock = accept(sock, &addr, &len); 241 241 if (newsock >= 0) { 242 Handle<Value> argv[ 2];243 argv[0] = External::New(&len); 242 Handle<Value> argv[5]; 243 argv[0] = External::New(&len); // dummy field 244 244 argv[1] = Int32::New(newsock); 245 245 argv[2] = args.This()->Get(String::New("family")); 246 246 argv[3] = args.This()->Get(String::New("type")); 247 247 argv[4] = args.This()->Get(String::New("proto")); 248 return Handle<Function>::Cast( socket_namespace()->Get(String::New("Socket")) )->NewInstance( 2, argv);248 return Handle<Function>::Cast( socket_namespace()->Get(String::New("Socket")) )->NewInstance(5, argv); 249 249 } else { 250 250 return throw_stderr("accept error: "); … … 422 422 END 423 423 424 FUNCTION(_socketpair) 425 // @prototype socket.socketpair([family[, type[, proto]]]) 426 ARG_BETWEEN(0, 3); 427 ARG_int(family, 0); 428 ARG_int(type, 1); 429 ARG_int(protocol, 2); 430 431 if (args.Length() < 1) { 432 #if defined(AF_UNIX) 433 family = AF_UNIX; 434 #else 435 family = AF_INET; 436 #endif 437 } 438 if (args.Length() < 2) { 439 type = SOCK_STREAM; 440 } 441 if (args.Length() < 3) { 442 protocol = 0; 443 } 444 445 int socket_vector[2]; 446 if (socketpair(family, type, protocol, socket_vector) == 0) { 447 Handle<Array> ret = Array::New(2); 448 for (int i=0; i<2; i++) { 449 Handle<Value> argv[5]; 450 argv[0] = External::New((void*)&family); // dummy field 451 argv[1] = Int32::New(socket_vector[i]); 452 argv[2] = Int32::New(family); 453 argv[3] = Int32::New(type); 454 argv[4] = Int32::New(protocol); 455 Handle<Object> obj = Handle<Function>::Cast( socket_namespace()->Get(String::New("Socket")) )->NewInstance(5, argv); 456 ret->Set(Int32::New(i), obj); 457 } 458 return ret; 459 } else { 460 return throw_stderr("inet_aton"); 461 } 462 END 463 424 464 MODULE() 425 465 { … … 441 481 BIND_CM("inet_aton", _inet_aton); 442 482 BIND_CM("inet_ntoa", _inet_ntoa); 483 BIND_CM("socketpair", _socketpair); 443 484 444 485 BIND_IM("bind", _bind);
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)