-
Notifications
You must be signed in to change notification settings - Fork 115
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
common: FileDescriptorCast: Update blocking state as necessary
Previously, casting a FileDescriptor to Socket would not reset its (cached) blocking state to "blocking" if it was configured non-blocking, which may lead to unexpected behavior. Check the "blocking" state upon casting and set it accordingly when a Socket/DatagramSocket/ServerSocket is required (since they are expected to be blocking by default). When casting to a SocketChannel/DatagramChannel/ServerSocketChannel, adjust the Java-cached "blocking" state to the actual blocking state of the native socket. Moreover, add support to declare "we don't know the state" (like in Windows, which is currently not supported for casting, though), and ensure we get the cached state and the native state back in sync. #151
- Loading branch information
1 parent
493788a
commit 5c51df5
Showing
8 changed files
with
269 additions
and
43 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
58 changes: 58 additions & 0 deletions
58
junixsocket-common/src/main/java/org/newsclub/net/unix/AFSomeSocketChannel.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
/* | ||
* junixsocket | ||
* | ||
* Copyright 2009-2023 Christian Kohlschütter | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
package org.newsclub.net.unix; | ||
|
||
import java.io.Closeable; | ||
import java.io.IOException; | ||
import java.nio.channels.DatagramChannel; | ||
import java.nio.channels.SelectableChannel; | ||
import java.nio.channels.ServerSocketChannel; | ||
import java.nio.channels.SocketChannel; | ||
|
||
/** | ||
* Marker interface that combines junixsocket-based {@link SocketChannel}s, {@link DatagramChannel}s | ||
* or {@link ServerSocketChannel}s. | ||
* | ||
* @author Christian Kohlschütter | ||
* @see AFSocketChannel | ||
* @see AFServerSocketChannel | ||
* @see AFDatagramChannel | ||
*/ | ||
public interface AFSomeSocketChannel extends Closeable, FileDescriptorAccess { | ||
/** | ||
* Checks if the channel is configured blocking. The result may be cached, and therefore not | ||
* invoke native code to check if the underlying socket is actually configured that way. | ||
* | ||
* @return {@code true} if blocking. | ||
*/ | ||
boolean isBlocking(); | ||
|
||
/** | ||
* Adjusts this channel's blocking mode. | ||
* | ||
* <p> | ||
* If the given blocking mode is different from the currently cached blocking mode then this | ||
* method native code to change it. | ||
* </p> | ||
* | ||
* @param block {@code true} if blocking is desired. | ||
* @return This channel. | ||
* @throws IOException on error. | ||
*/ | ||
SelectableChannel configureBlocking(boolean block) throws IOException; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.