@@ -146,6 +146,19 @@ + (EDOHostNamingService *)namingServiceWithDeviceSerial:(NSString *)serial error
146146 return nil ;
147147}
148148
149+ + (BOOL )isServiceAvailableOnPort : (UInt16)port {
150+ EDOHostPort *hostPort = [EDOHostPort hostPortWithLocalPort: port];
151+ EDOServiceRequest *classRequest =
152+ [EDOClassRequest requestWithClassName: NSStringFromClass ([NSObject class ]) hostPort: hostPort];
153+ EDOHostService *service = [EDOHostService serviceForCurrentExecutingQueue ];
154+ NSError *error = nil ;
155+ [self sendSynchronousRequest: classRequest
156+ onPort: hostPort
157+ withExecutor: service.executor
158+ error: &error];
159+ return error == nil ;
160+ }
161+
149162#pragma mark - Private Category
150163
151164+ (NSMapTable *)localDistantObjects {
@@ -235,6 +248,13 @@ + (EDOServiceResponse *)sendSynchronousRequest:(EDOServiceRequest *)request
235248+ (EDOServiceResponse *)sendSynchronousRequest : (EDOServiceRequest *)request
236249 onPort : (EDOHostPort *)port
237250 withExecutor : (EDOExecutor *)executor {
251+ return [self sendSynchronousRequest: request onPort: port withExecutor: executor error: NULL ];
252+ }
253+
254+ + (EDOServiceResponse *)sendSynchronousRequest : (EDOServiceRequest *)request
255+ onPort : (EDOHostPort *)port
256+ withExecutor : (EDOExecutor *)executor
257+ error : (NSError **)errorOut {
238258 EDOClientServiceStatsCollector *stats = EDOClientServiceStatsCollector.sharedServiceStats ;
239259
240260 int maxAttempts = 2 ;
@@ -257,7 +277,11 @@ + (EDOServiceResponse *)sendSynchronousRequest:(EDOServiceRequest *)request
257277 NSError *error = [NSError errorWithDomain: EDOServiceErrorDomain
258278 code: EDOServiceErrorCannotConnect
259279 userInfo: userInfo];
260- gEDOClientErrorHandler (error);
280+ if (errorOut != NULL ) {
281+ *errorOut = error;
282+ } else {
283+ gEDOClientErrorHandler (error);
284+ }
261285 return nil ;
262286 }
263287
@@ -327,7 +351,11 @@ + (EDOServiceResponse *)sendSynchronousRequest:(EDOServiceRequest *)request
327351 NSError *error = [NSError errorWithDomain: EDOServiceErrorDomain
328352 code: EDOServiceErrorConnectTimeout
329353 userInfo: userInfo];
330- gEDOClientErrorHandler (error);
354+ if (errorOut != NULL ) {
355+ *errorOut = error;
356+ } else {
357+ gEDOClientErrorHandler (error);
358+ }
331359 return nil ;
332360}
333361
@@ -436,4 +464,4 @@ BOOL EDOIsRemoteObject(id object) {
436464 return objectClass == remoteObjectClass || objectClass == remoteBlockClass;
437465}
438466
439- void EDOExportEDOClientError (NSError *error) { gEDOClientErrorHandler (error); }
467+ void EDOExportEDOClientError (NSError *error) { gEDOClientErrorHandler (error); }
0 commit comments