فهرست منبع

system: BConnection: remove assertion for address supported and make a runtime check instead

ambrop7 14 سال پیش
والد
کامیت
cc86d5eadf
3فایلهای تغییر یافته به همراه27 افزوده شده و 6 حذف شده
  1. 2 2
      system/BConnection.h
  2. 13 2
      system/BConnection_unix.c
  3. 12 2
      system/BConnection_win.c

+ 2 - 2
system/BConnection.h

@@ -75,7 +75,7 @@ typedef void (*BListener_handler) (void *user);
  * {@link BNetwork_GlobalInit} must have been done.
  * 
  * @param o the object
- * @param addr address to listen on. Must be supported according to {@link BConnection_AddressSupported}.
+ * @param addr address to listen on
  * @param reactor reactor we live in
  * @param user argument to handler
  * @param handler handler called when a connection can be accepted
@@ -135,7 +135,7 @@ typedef void (*BConnector_handler) (void *user, int is_error);
  * {@link BNetwork_GlobalInit} must have been done.
  * 
  * @param o the object
- * @param addr address to connect to. Must be supported according to {@link BConnection_AddressSupported}.
+ * @param addr address to connect to
  * @param reactor reactor we live in
  * @param user argument to handler
  * @param handler handler called when the connection attempt finishes

+ 13 - 2
system/BConnection_unix.c

@@ -431,7 +431,6 @@ int BConnection_AddressSupported (BAddr addr)
 int BListener_Init (BListener *o, BAddr addr, BReactor *reactor, void *user,
                     BListener_handler handler)
 {
-    ASSERT(BConnection_AddressSupported(addr))
     ASSERT(handler)
     BNetwork_Assert();
     
@@ -440,6 +439,12 @@ int BListener_Init (BListener *o, BAddr addr, BReactor *reactor, void *user,
     o->user = user;
     o->handler = handler;
     
+    // check address
+    if (!BConnection_AddressSupported(addr)) {
+        BLog(BLOG_ERROR, "address not supported");
+        goto fail0;
+    }
+    
     // convert address
     struct sys_addr sysaddr;
     addr_socket_to_sys(&sysaddr, addr);
@@ -580,7 +585,6 @@ void BListener_Free (BListener *o)
 int BConnector_Init (BConnector *o, BAddr addr, BReactor *reactor, void *user,
                      BConnector_handler handler)
 {
-    ASSERT(BConnection_AddressSupported(addr))
     ASSERT(handler)
     BNetwork_Assert();
     
@@ -589,6 +593,12 @@ int BConnector_Init (BConnector *o, BAddr addr, BReactor *reactor, void *user,
     o->user = user;
     o->handler = handler;
     
+    // check address
+    if (!BConnection_AddressSupported(addr)) {
+        BLog(BLOG_ERROR, "address not supported");
+        goto fail0;
+    }
+    
     // convert address
     struct sys_addr sysaddr;
     addr_socket_to_sys(&sysaddr, addr);
@@ -649,6 +659,7 @@ fail2:
     }
 fail1:
     BPending_Free(&o->job);
+fail0:
     return 0;
 }
 

+ 12 - 2
system/BConnection_win.c

@@ -439,7 +439,6 @@ int BConnection_AddressSupported (BAddr addr)
 int BListener_Init (BListener *o, BAddr addr, BReactor *reactor, void *user,
                     BListener_handler handler)
 {
-    ASSERT(BConnection_AddressSupported(addr))
     ASSERT(handler)
     BNetwork_Assert();
     
@@ -448,6 +447,12 @@ int BListener_Init (BListener *o, BAddr addr, BReactor *reactor, void *user,
     o->user = user;
     o->handler = handler;
     
+    // check address
+    if (!BConnection_AddressSupported(addr)) {
+        BLog(BLOG_ERROR, "address not supported");
+        goto fail0;
+    }
+    
     // convert address
     struct sys_addr sysaddr;
     addr_socket_to_sys(&sysaddr, addr);
@@ -560,7 +565,6 @@ void BListener_Free (BListener *o)
 int BConnector_Init (BConnector *o, BAddr addr, BReactor *reactor, void *user,
                      BConnector_handler handler)
 {
-    ASSERT(BConnection_AddressSupported(addr))
     ASSERT(handler)
     BNetwork_Assert();
     
@@ -569,6 +573,12 @@ int BConnector_Init (BConnector *o, BAddr addr, BReactor *reactor, void *user,
     o->user = user;
     o->handler = handler;
     
+    // check address
+    if (!BConnection_AddressSupported(addr)) {
+        BLog(BLOG_ERROR, "address not supported");
+        goto fail0;
+    }
+    
     // convert address
     struct sys_addr sysaddr;
     addr_socket_to_sys(&sysaddr, addr);