Bubbled up reusePort to the API as an option on createSocket

This commit is contained in:
Gavin Conway 2017-08-22 17:17:03 +10:00 committed by Mark Vayngrib
parent 6f62be0d6e
commit 822b1e0933
4 changed files with 10 additions and 5 deletions

View File

@ -43,6 +43,7 @@ function UdpSocket(options, onmessage) {
}
this.type = options.type
this.reusePort = options && options.reusePort
this._ipv = Number(this.type.slice(3))
this._ipRegex = ipRegex['v' + this._ipv]({ exact: true })
this._id = instances++
@ -89,7 +90,7 @@ UdpSocket.prototype.bind = function(port, address, callback) {
this._state = STATE.BINDING
this._debug('binding, address:', address, 'port:', port)
Sockets.bind(this._id, port, address, function(err, addr) {
Sockets.bind(this._id, port, address, {reusePort: this.reusePort }, function(err, addr) {
err = normalizeError(err)
if (err) {
// questionable: may want to self-destruct and

View File

@ -61,9 +61,10 @@ typedef enum RCTUDPError RCTUDPError;
*
* @param port
* @param host ip address
* @param options (such as 'reusePort')
* @return true if bound, false if there was an error
*/
- (BOOL)bind:(u_int16_t) port address:(NSString*) address error:(NSError**)error;
- (BOOL)bind:(u_int16_t) port address:(NSString*)address options:(NSDictionary *)options error:(NSError**)error;
/**
* Join multicast groupt

View File

@ -78,7 +78,7 @@ NSString *const RCTUDPErrorDomain = @"RCTUDPErrorDomain";
}
}
- (BOOL) bind:(u_int16_t)port address:(NSString *)address error:(NSError **) error
- (BOOL)bind:(u_int16_t)port address:(NSString *)address options:(NSDictionary *)options error:(NSError **) error
{
if (_port) {
@ -96,7 +96,9 @@ NSString *const RCTUDPErrorDomain = @"RCTUDPErrorDomain";
[_udpSocket setMaxReceiveIPv4BufferSize:UINT16_MAX];
[_udpSocket setMaxReceiveIPv6BufferSize:UINT16_MAX];
[_udpSocket enableReusePort:true error:error];
BOOL reusePort = options[@"reusePort"] ?: NO;
[_udpSocket enableReusePort:reusePort error:error];
BOOL result;
if (address) {

View File

@ -53,13 +53,14 @@ RCT_EXPORT_METHOD(createSocket:(nonnull NSNumber*)cId withOptions:(NSDictionary*
RCT_EXPORT_METHOD(bind:(nonnull NSNumber*)cId
port:(int)port
address:(NSString *)address
options:(NSDictionary *)options
callback:(RCTResponseSenderBlock)callback)
{
UdpSocketClient* client = [self findClient:cId callback:callback];
if (!client) return;
NSError *error = nil;
if (![client bind:port address:address error:&error])
if (![client bind:port address:address options:options error:&error])
{
NSString *msg = error.localizedFailureReason ?: error.localizedDescription;
callback(@[msg ?: @"unknown error when binding"]);