@@ -809,18 +809,29 @@ function connect(self, address, port, addressType, localAddress, localPort) {
809
809
err = bind ( localAddress , localPort ) ;
810
810
811
811
if ( err ) {
812
- var details = util . format ( '%s:%s' , address , port || '' ) ;
813
812
var additions = {
814
813
address : address
815
814
} ;
816
- if ( port ) additions . port = port ;
815
+ var details ;
816
+ if ( port ) {
817
+ details = util . format ( '%s:%s' , address , port ) ;
818
+ additions . port = port ;
819
+ } else {
820
+ details = address ;
821
+ }
817
822
var ex = errnoException ( err , 'bind' , details , additions ) ;
818
823
self . _destroy ( ex ) ;
819
824
return ;
820
825
}
821
826
}
822
827
823
- var req = { oncomplete : afterConnect } ;
828
+ var req = {
829
+ oncomplete : afterConnect ,
830
+ port : undefined ,
831
+ address : undefined ,
832
+ localAddress : undefined ,
833
+ localPort : undefined
834
+ } ;
824
835
if ( addressType === 6 || addressType === 4 ) {
825
836
port = port | 0 ;
826
837
if ( port <= 0 || port > 65535 )
@@ -838,13 +849,16 @@ function connect(self, address, port, addressType, localAddress, localPort) {
838
849
err = self . _handle . connect ( req , address , afterConnect ) ;
839
850
}
840
851
852
+ self . _getsockname ( ) ;
853
+ if ( self . _sockname ) {
854
+ req . localAddress = self . _sockname . address ;
855
+ req . localPort = self . _sockname . port ;
856
+ }
841
857
if ( err ) {
842
- var details = util . format ( '%s:%s' , address , port || '' ) ;
843
- var additions = {
844
- address : address
845
- } ;
846
- if ( port ) additions . port = port ;
847
- var ex = errnoException ( err , 'connect' , details , additions ) ;
858
+ var details = port ?
859
+ util . format ( '%s:%s' , address , port ) :
860
+ address ;
861
+ var ex = errnoException ( err , 'connect' , details , req ) ;
848
862
self . _destroy ( ex ) ;
849
863
}
850
864
}
@@ -928,8 +942,15 @@ Socket.prototype.connect = function(options, cb) {
928
942
// There are no event listeners registered yet so defer the
929
943
// error event to the next tick.
930
944
process . nextTick ( function ( ) {
931
- if ( options . port ) err . port = options . port ;
932
- self . emit ( 'error' , err ) ;
945
+ // The errno may not be recognized by libuv
946
+ var ex = util . _extend ( err , options ) ;
947
+ var message = util . format ( '%s %s %s:%s' ,
948
+ err . syscall ,
949
+ err . errno ,
950
+ options . host ,
951
+ options . port ) ;
952
+ ex . message = message ;
953
+ self . emit ( 'error' , ex ) ;
933
954
self . _destroy ( ) ;
934
955
} ) ;
935
956
} else {
@@ -996,12 +1017,17 @@ function afterConnect(status, handle, req, readable, writable) {
996
1017
997
1018
} else {
998
1019
self . _connecting = false ;
999
- var details = util . format ( '%s:%s' , req . address , req . port || '' ) ;
1000
- var additions = {
1001
- address : req . address
1002
- } ;
1003
- if ( req . port ) additions . port = req . port ;
1004
- var ex = errnoException ( status , 'connect' , details , additions ) ;
1020
+ var details = req . port ?
1021
+ util . format ( '%s:%s' , req . address , req . port ) :
1022
+ req . address ;
1023
+
1024
+ if ( req . localAddress && req . localPort ) {
1025
+ details = util . format ( '%s - Local (%s:%s)' ,
1026
+ details ,
1027
+ req . localAddress ,
1028
+ req . localPort ) ;
1029
+ }
1030
+ var ex = errnoException ( status , 'connect' , details , req ) ;
1005
1031
self . _destroy ( ex ) ;
1006
1032
}
1007
1033
}
@@ -1130,11 +1156,20 @@ Server.prototype._listen2 = function(address, port, addressType, backlog, fd) {
1130
1156
debug ( '_listen2: create a handle' ) ;
1131
1157
var rval = createServerHandle ( address , port , addressType , fd ) ;
1132
1158
if ( util . isNumber ( rval ) ) {
1133
- var details = util . format ( '%s:%s' , address , port > 0 ? port : '' ) ;
1134
- var additions = {
1135
- address : address
1136
- } ;
1137
- if ( port > 0 ) additions . port = port ;
1159
+ var details , additions ;
1160
+ if ( port > 0 ) {
1161
+ details = util . format ( '%s:%s' , address , port ) ;
1162
+ additions = {
1163
+ address : address ,
1164
+ port : port
1165
+ } ;
1166
+ } else {
1167
+ details = address ;
1168
+ additions = {
1169
+ address : address
1170
+ } ;
1171
+ }
1172
+
1138
1173
var error = errnoException ( rval , 'listen' , details , additions ) ;
1139
1174
process . nextTick ( function ( ) {
1140
1175
self . emit ( 'error' , error ) ;
@@ -1152,11 +1187,19 @@ Server.prototype._listen2 = function(address, port, addressType, backlog, fd) {
1152
1187
var err = _listen ( self . _handle , backlog ) ;
1153
1188
1154
1189
if ( err ) {
1155
- var details = util . format ( '%s:%s' , address , port > 0 ? port : '' ) ;
1156
- var additions = {
1157
- address : address
1158
- } ;
1159
- if ( port > 0 ) additions . port = port ;
1190
+ var details , additions ;
1191
+ if ( port > 0 ) {
1192
+ details = util . format ( '%s:%s' , address , port ) ;
1193
+ additions = {
1194
+ address : address ,
1195
+ port : port
1196
+ } ;
1197
+ } else {
1198
+ details = address ;
1199
+ additions = {
1200
+ address : address
1201
+ } ;
1202
+ }
1160
1203
var ex = errnoException ( err , 'listen' , details , additions ) ;
1161
1204
self . _handle . close ( ) ;
1162
1205
self . _handle = null ;
@@ -1204,11 +1247,19 @@ function listen(self, address, port, addressType, backlog, fd) {
1204
1247
}
1205
1248
1206
1249
if ( err ) {
1207
- var details = util . format ( '%s:%s' , address , port > 0 ? port : '' ) ;
1208
- var additions = {
1209
- address : address
1210
- } ;
1211
- if ( port > 0 ) additions . port = port ;
1250
+ var details , additions ;
1251
+ if ( port > 0 ) {
1252
+ details = util . format ( '%s:%s' , address , port ) ;
1253
+ additions = {
1254
+ address : address ,
1255
+ port : port
1256
+ } ;
1257
+ } else {
1258
+ details = address ;
1259
+ additions = {
1260
+ address : address
1261
+ } ;
1262
+ }
1212
1263
var ex = errnoException ( err , 'bind' , details , additions ) ;
1213
1264
return self . emit ( 'error' , ex ) ;
1214
1265
}
0 commit comments