255
256 int cmpScopeID (unsigned int scope, struct sockaddr *him) {
257 struct sockaddr_in6 *hext = (struct sockaddr_in6 *)him;
258 return hext->sin6_scope_id == scope;
259 }
260
261 #else
262
263 int getScopeID (struct sockaddr *him) {
264 struct sockaddr_in6 *him6 = (struct sockaddr_in6 *)him;
265 return him6->sin6_scope_id;
266 }
267
268 int cmpScopeID (unsigned int scope, struct sockaddr *him) {
269 struct sockaddr_in6 *him6 = (struct sockaddr_in6 *)him;
270 return him6->sin6_scope_id == scope;
271 }
272
273 #endif
274
275
276 void
277 NET_ThrowByNameWithLastError(JNIEnv *env, const char *name,
278 const char *defaultDetail) {
279 char errmsg[255];
280 sprintf(errmsg, "errno: %d, error: %s\n", errno, defaultDetail);
281 JNU_ThrowByNameWithLastError(env, name, errmsg);
282 }
283
284 void
285 NET_ThrowCurrent(JNIEnv *env, char *msg) {
286 NET_ThrowNew(env, errno, msg);
287 }
288
289 void
290 NET_ThrowNew(JNIEnv *env, int errorNumber, char *msg) {
291 char fullMsg[512];
292 if (!msg) {
293 msg = "no further information";
294 }
295 switch(errorNumber) {
296 case EBADF:
297 jio_snprintf(fullMsg, sizeof(fullMsg), "socket closed: %s", msg);
298 JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", fullMsg);
299 break;
300 case EINTR:
301 JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException", msg);
302 break;
303 default:
|
255
256 int cmpScopeID (unsigned int scope, struct sockaddr *him) {
257 struct sockaddr_in6 *hext = (struct sockaddr_in6 *)him;
258 return hext->sin6_scope_id == scope;
259 }
260
261 #else
262
263 int getScopeID (struct sockaddr *him) {
264 struct sockaddr_in6 *him6 = (struct sockaddr_in6 *)him;
265 return him6->sin6_scope_id;
266 }
267
268 int cmpScopeID (unsigned int scope, struct sockaddr *him) {
269 struct sockaddr_in6 *him6 = (struct sockaddr_in6 *)him;
270 return him6->sin6_scope_id == scope;
271 }
272
273 #endif
274
275 void
276 NET_ThrowCurrent(JNIEnv *env, char *msg) {
277 NET_ThrowNew(env, errno, msg);
278 }
279
280 void
281 NET_ThrowNew(JNIEnv *env, int errorNumber, char *msg) {
282 char fullMsg[512];
283 if (!msg) {
284 msg = "no further information";
285 }
286 switch(errorNumber) {
287 case EBADF:
288 jio_snprintf(fullMsg, sizeof(fullMsg), "socket closed: %s", msg);
289 JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", fullMsg);
290 break;
291 case EINTR:
292 JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException", msg);
293 break;
294 default:
|