@@ -98,15 +98,19 @@ function _createSocketHandle(address, port, addressType, fd, flags) {
9898 return handle ;
9999}
100100
101+ const kOptionSymbol = Symbol ( 'options symbol' ) ;
101102
102103function Socket ( type , listener ) {
103104 EventEmitter . call ( this ) ;
104105 var lookup ;
105106
107+ this [ kOptionSymbol ] = { } ;
106108 if ( type !== null && typeof type === 'object' ) {
107109 var options = type ;
108110 type = options . type ;
109111 lookup = options . lookup ;
112+ this [ kOptionSymbol ] . recvBufferSize = options . recvBufferSize ;
113+ this [ kOptionSymbol ] . sendBufferSize = options . sendBufferSize ;
110114 }
111115
112116 var handle = newHandle ( type , lookup ) ;
@@ -141,6 +145,12 @@ function startListening(socket) {
141145 socket . _bindState = BIND_STATE_BOUND ;
142146 socket . fd = - 42 ; // compatibility hack
143147
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+
144154 socket . emit ( 'listening' ) ;
145155}
146156
@@ -157,6 +167,20 @@ function replaceHandle(self, newHandle) {
157167 self . _handle = newHandle ;
158168}
159169
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+
160184Socket . prototype . bind = function ( port_ , address_ /*, callback*/ ) {
161185 let port = port_ ;
162186
@@ -651,6 +675,27 @@ Socket.prototype.unref = function() {
651675 return this ;
652676} ;
653677
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+
654699module . exports = {
655700 _createSocketHandle,
656701 createSocket,
0 commit comments