How to timeout a read on Java Socket?
I'm trying to read items from a socket and I notice that if there is nothing on the stream of the socket it will stay at the read and back up my application. I wanted to know if there was a way to set a read timeout or terminate the connection after a certain amount of time of nothing in the socket.
java sockets timeout inputstream
add a comment |
I'm trying to read items from a socket and I notice that if there is nothing on the stream of the socket it will stay at the read and back up my application. I wanted to know if there was a way to set a read timeout or terminate the connection after a certain amount of time of nothing in the socket.
java sockets timeout inputstream
add a comment |
I'm trying to read items from a socket and I notice that if there is nothing on the stream of the socket it will stay at the read and back up my application. I wanted to know if there was a way to set a read timeout or terminate the connection after a certain amount of time of nothing in the socket.
java sockets timeout inputstream
I'm trying to read items from a socket and I notice that if there is nothing on the stream of the socket it will stay at the read and back up my application. I wanted to know if there was a way to set a read timeout or terminate the connection after a certain amount of time of nothing in the socket.
java sockets timeout inputstream
java sockets timeout inputstream
edited Aug 25 '10 at 22:41
erickson
221k42330428
221k42330428
asked Aug 25 '10 at 22:36
MasterbanMasterban
110117
110117
add a comment |
add a comment |
3 Answers
3
active
oldest
votes
If you write Java, learning to navigate the API documentation is helpful. In the case of a socket read, you can set the timeout option.
add a comment |
If this socket was created through a URLConnection
to perform a web request, you can set the read and connect timeouts directly on the URLConnection
before reading the stream:
InputStream createInputStreamForUriString(String uriString) throws IOException, URISyntaxException {
URLConnection in = new URL(uriString).openConnection();
in.setConnectTimeout(5000);
in.setReadTimeout(5000);
in.setAllowUserInteraction(false);
in.setDoInput(true);
in.setDoOutput(false);
return in.getInputStream();
}
setReadTimeout
will only cause an exception, if the timeout elapses before the first data is received. After the first data is received, no timeout exception will occur even if the connection hangs infinitely.
– ooxi
Jan 25 '17 at 11:32
1
@ooxi That is completely false. The read timeout applies to every read, not just the first one.
– user207421
Feb 24 '17 at 0:11
add a comment |
Yes, there should be an override of Read() that accepts a timeout value. By 'override' I am not suggesting anyone write one, I am pointing out that one of the overrides of the socket methods he is using takes a timeout value.
And you don't read directly from a socket anyway, you get anInputStream
from the socket and then read from that. Do what @erikson says, usesetSoTimeout()
.
– krock
Aug 25 '10 at 22:49
5
no there shouldn't. That would make theSocketInputStream
API different from other streams. There is already a way to do this that doesn't break theInputStream
substitutability.
– Stephen C
Aug 26 '10 at 0:44
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f3570762%2fhow-to-timeout-a-read-on-java-socket%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
If you write Java, learning to navigate the API documentation is helpful. In the case of a socket read, you can set the timeout option.
add a comment |
If you write Java, learning to navigate the API documentation is helpful. In the case of a socket read, you can set the timeout option.
add a comment |
If you write Java, learning to navigate the API documentation is helpful. In the case of a socket read, you can set the timeout option.
If you write Java, learning to navigate the API documentation is helpful. In the case of a socket read, you can set the timeout option.
answered Aug 25 '10 at 22:39
ericksonerickson
221k42330428
221k42330428
add a comment |
add a comment |
If this socket was created through a URLConnection
to perform a web request, you can set the read and connect timeouts directly on the URLConnection
before reading the stream:
InputStream createInputStreamForUriString(String uriString) throws IOException, URISyntaxException {
URLConnection in = new URL(uriString).openConnection();
in.setConnectTimeout(5000);
in.setReadTimeout(5000);
in.setAllowUserInteraction(false);
in.setDoInput(true);
in.setDoOutput(false);
return in.getInputStream();
}
setReadTimeout
will only cause an exception, if the timeout elapses before the first data is received. After the first data is received, no timeout exception will occur even if the connection hangs infinitely.
– ooxi
Jan 25 '17 at 11:32
1
@ooxi That is completely false. The read timeout applies to every read, not just the first one.
– user207421
Feb 24 '17 at 0:11
add a comment |
If this socket was created through a URLConnection
to perform a web request, you can set the read and connect timeouts directly on the URLConnection
before reading the stream:
InputStream createInputStreamForUriString(String uriString) throws IOException, URISyntaxException {
URLConnection in = new URL(uriString).openConnection();
in.setConnectTimeout(5000);
in.setReadTimeout(5000);
in.setAllowUserInteraction(false);
in.setDoInput(true);
in.setDoOutput(false);
return in.getInputStream();
}
setReadTimeout
will only cause an exception, if the timeout elapses before the first data is received. After the first data is received, no timeout exception will occur even if the connection hangs infinitely.
– ooxi
Jan 25 '17 at 11:32
1
@ooxi That is completely false. The read timeout applies to every read, not just the first one.
– user207421
Feb 24 '17 at 0:11
add a comment |
If this socket was created through a URLConnection
to perform a web request, you can set the read and connect timeouts directly on the URLConnection
before reading the stream:
InputStream createInputStreamForUriString(String uriString) throws IOException, URISyntaxException {
URLConnection in = new URL(uriString).openConnection();
in.setConnectTimeout(5000);
in.setReadTimeout(5000);
in.setAllowUserInteraction(false);
in.setDoInput(true);
in.setDoOutput(false);
return in.getInputStream();
}
If this socket was created through a URLConnection
to perform a web request, you can set the read and connect timeouts directly on the URLConnection
before reading the stream:
InputStream createInputStreamForUriString(String uriString) throws IOException, URISyntaxException {
URLConnection in = new URL(uriString).openConnection();
in.setConnectTimeout(5000);
in.setReadTimeout(5000);
in.setAllowUserInteraction(false);
in.setDoInput(true);
in.setDoOutput(false);
return in.getInputStream();
}
answered Jan 26 '16 at 15:20
Arie Z.Arie Z.
37936
37936
setReadTimeout
will only cause an exception, if the timeout elapses before the first data is received. After the first data is received, no timeout exception will occur even if the connection hangs infinitely.
– ooxi
Jan 25 '17 at 11:32
1
@ooxi That is completely false. The read timeout applies to every read, not just the first one.
– user207421
Feb 24 '17 at 0:11
add a comment |
setReadTimeout
will only cause an exception, if the timeout elapses before the first data is received. After the first data is received, no timeout exception will occur even if the connection hangs infinitely.
– ooxi
Jan 25 '17 at 11:32
1
@ooxi That is completely false. The read timeout applies to every read, not just the first one.
– user207421
Feb 24 '17 at 0:11
setReadTimeout
will only cause an exception, if the timeout elapses before the first data is received. After the first data is received, no timeout exception will occur even if the connection hangs infinitely.– ooxi
Jan 25 '17 at 11:32
setReadTimeout
will only cause an exception, if the timeout elapses before the first data is received. After the first data is received, no timeout exception will occur even if the connection hangs infinitely.– ooxi
Jan 25 '17 at 11:32
1
1
@ooxi That is completely false. The read timeout applies to every read, not just the first one.
– user207421
Feb 24 '17 at 0:11
@ooxi That is completely false. The read timeout applies to every read, not just the first one.
– user207421
Feb 24 '17 at 0:11
add a comment |
Yes, there should be an override of Read() that accepts a timeout value. By 'override' I am not suggesting anyone write one, I am pointing out that one of the overrides of the socket methods he is using takes a timeout value.
And you don't read directly from a socket anyway, you get anInputStream
from the socket and then read from that. Do what @erikson says, usesetSoTimeout()
.
– krock
Aug 25 '10 at 22:49
5
no there shouldn't. That would make theSocketInputStream
API different from other streams. There is already a way to do this that doesn't break theInputStream
substitutability.
– Stephen C
Aug 26 '10 at 0:44
add a comment |
Yes, there should be an override of Read() that accepts a timeout value. By 'override' I am not suggesting anyone write one, I am pointing out that one of the overrides of the socket methods he is using takes a timeout value.
And you don't read directly from a socket anyway, you get anInputStream
from the socket and then read from that. Do what @erikson says, usesetSoTimeout()
.
– krock
Aug 25 '10 at 22:49
5
no there shouldn't. That would make theSocketInputStream
API different from other streams. There is already a way to do this that doesn't break theInputStream
substitutability.
– Stephen C
Aug 26 '10 at 0:44
add a comment |
Yes, there should be an override of Read() that accepts a timeout value. By 'override' I am not suggesting anyone write one, I am pointing out that one of the overrides of the socket methods he is using takes a timeout value.
Yes, there should be an override of Read() that accepts a timeout value. By 'override' I am not suggesting anyone write one, I am pointing out that one of the overrides of the socket methods he is using takes a timeout value.
edited May 2 '11 at 23:08
answered Aug 25 '10 at 22:38
Kelly S. FrenchKelly S. French
10.5k74787
10.5k74787
And you don't read directly from a socket anyway, you get anInputStream
from the socket and then read from that. Do what @erikson says, usesetSoTimeout()
.
– krock
Aug 25 '10 at 22:49
5
no there shouldn't. That would make theSocketInputStream
API different from other streams. There is already a way to do this that doesn't break theInputStream
substitutability.
– Stephen C
Aug 26 '10 at 0:44
add a comment |
And you don't read directly from a socket anyway, you get anInputStream
from the socket and then read from that. Do what @erikson says, usesetSoTimeout()
.
– krock
Aug 25 '10 at 22:49
5
no there shouldn't. That would make theSocketInputStream
API different from other streams. There is already a way to do this that doesn't break theInputStream
substitutability.
– Stephen C
Aug 26 '10 at 0:44
And you don't read directly from a socket anyway, you get an
InputStream
from the socket and then read from that. Do what @erikson says, use setSoTimeout()
.– krock
Aug 25 '10 at 22:49
And you don't read directly from a socket anyway, you get an
InputStream
from the socket and then read from that. Do what @erikson says, use setSoTimeout()
.– krock
Aug 25 '10 at 22:49
5
5
no there shouldn't. That would make the
SocketInputStream
API different from other streams. There is already a way to do this that doesn't break the InputStream
substitutability.– Stephen C
Aug 26 '10 at 0:44
no there shouldn't. That would make the
SocketInputStream
API different from other streams. There is already a way to do this that doesn't break the InputStream
substitutability.– Stephen C
Aug 26 '10 at 0:44
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f3570762%2fhow-to-timeout-a-read-on-java-socket%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown