@@ -98,15 +98,19 @@ function _createSocketHandle(address, port, addressType, fd, flags) {
98
98
return handle ;
99
99
}
100
100
101
+ const kOptionSymbol = Symbol ( 'options symbol' ) ;
101
102
102
103
function Socket ( type , listener ) {
103
104
EventEmitter . call ( this ) ;
104
105
var lookup ;
105
106
107
+ this [ kOptionSymbol ] = { } ;
106
108
if ( type !== null && typeof type === 'object' ) {
107
109
var options = type ;
108
110
type = options . type ;
109
111
lookup = options . lookup ;
112
+ this [ kOptionSymbol ] . recvBufferSize = options . recvBufferSize ;
113
+ this [ kOptionSymbol ] . sendBufferSize = options . sendBufferSize ;
110
114
}
111
115
112
116
var handle = newHandle ( type , lookup ) ;
@@ -141,6 +145,12 @@ function startListening(socket) {
141
145
socket . _bindState = BIND_STATE_BOUND ;
142
146
socket . fd = - 42 ; // compatibility hack
143
147
148
+ if ( socket [ kOptionSymbol ] . recvBufferSize )
149
+ bufferSize ( socket , socket [ kOptionSymbol ] . recvBufferSize , 'recv' ) ;
150
+
151
+ if ( socket [ kOptionSymbol ] . sendBufferSize )
152
+ bufferSize ( socket , socket [ kOptionSymbol ] . sendBufferSize , 'send' ) ;
153
+
144
154
socket . emit ( 'listening' ) ;
145
155
}
146
156
@@ -157,6 +167,20 @@ function replaceHandle(self, newHandle) {
157
167
self . _handle = newHandle ;
158
168
}
159
169
170
+ function bufferSize ( self , size , buffer ) {
171
+ if ( size >>> 0 !== size )
172
+ throw new errors . TypeError ( 'ERR_SOCKET_BAD_BUFFER_SIZE' ) ;
173
+
174
+ try {
175
+ if ( buffer === 'recv' )
176
+ return self . _handle . bufferSize ( size , 0 ) ;
177
+ else
178
+ return self . _handle . bufferSize ( size , 1 ) ;
179
+ } catch ( e ) {
180
+ throw new errors . Error ( 'ERR_SOCKET_BUFFER_SIZE' , e ) ;
181
+ }
182
+ }
183
+
160
184
Socket . prototype . bind = function ( port_ , address_ /*, callback*/ ) {
161
185
let port = port_ ;
162
186
@@ -651,6 +675,27 @@ Socket.prototype.unref = function() {
651
675
return this ;
652
676
} ;
653
677
678
+
679
+ Socket . prototype . setRecvBufferSize = function ( size ) {
680
+ bufferSize ( this , size , 'recv' ) ;
681
+ } ;
682
+
683
+
684
+ Socket . prototype . setSendBufferSize = function ( size ) {
685
+ bufferSize ( this , size , 'send' ) ;
686
+ } ;
687
+
688
+
689
+ Socket . prototype . getRecvBufferSize = function ( ) {
690
+ return bufferSize ( this , 0 , 'recv' ) ;
691
+ } ;
692
+
693
+
694
+ Socket . prototype . getSendBufferSize = function ( ) {
695
+ return bufferSize ( this , 0 , 'send' ) ;
696
+ } ;
697
+
698
+
654
699
module . exports = {
655
700
_createSocketHandle,
656
701
createSocket,
0 commit comments