use provided ip for TcpSocket::connect instead of 0.0.0.0

This commit is contained in:
fdb-hiroshima 2020-04-16 09:55:17 +02:00 committed by GitHub
parent 7782b24427
commit 09f4a8f551
1 changed files with 17 additions and 4 deletions

View File

@ -483,9 +483,9 @@ impl<'a> TcpSocket<'a> {
// If local address is not provided, use an unspecified address but a specified protocol. // If local address is not provided, use an unspecified address but a specified protocol.
// This lets us lower IpRepr later to determine IP header size and calculate MSS, // This lets us lower IpRepr later to determine IP header size and calculate MSS,
// but without committing to a specific address right away. // but without committing to a specific address right away.
let local_addr = match remote_endpoint.addr { let local_addr = match local_endpoint.addr {
IpAddress::Unspecified => return Err(Error::Unaddressable), IpAddress::Unspecified => remote_endpoint.addr.to_unspecified(),
_ => remote_endpoint.addr.to_unspecified(), ip => ip,
}; };
let local_endpoint = IpEndpoint { addr: local_addr, ..local_endpoint }; let local_endpoint = IpEndpoint { addr: local_addr, ..local_endpoint };
@ -1894,6 +1894,16 @@ mod test {
s s
} }
fn socket_syn_sent_with_local_ipendpoint(local: IpEndpoint) -> TcpSocket<'static> {
let mut s = socket();
s.state = State::SynSent;
s.local_endpoint = local;
s.remote_endpoint = REMOTE_END;
s.local_seq_no = LOCAL_SEQ;
s.remote_last_seq = LOCAL_SEQ;
s
}
fn socket_established_with_buffer_sizes(tx_len: usize, rx_len: usize) -> TcpSocket<'static> { fn socket_established_with_buffer_sizes(tx_len: usize, rx_len: usize) -> TcpSocket<'static> {
let mut s = socket_syn_received_with_buffer_sizes(tx_len, rx_len); let mut s = socket_syn_received_with_buffer_sizes(tx_len, rx_len);
s.state = State::Established; s.state = State::Established;
@ -2318,6 +2328,9 @@ mod test {
Err(Error::Unaddressable)); Err(Error::Unaddressable));
assert_eq!(s.connect((IpAddress::Unspecified, 80), LOCAL_END), assert_eq!(s.connect((IpAddress::Unspecified, 80), LOCAL_END),
Err(Error::Unaddressable)); Err(Error::Unaddressable));
s.connect(REMOTE_END, LOCAL_END).expect("Connect failed with valid parameters");
assert_eq!(s.local_endpoint(), LOCAL_END);
assert_eq!(s.remote_endpoint(), REMOTE_END);
} }
#[test] #[test]
@ -2378,7 +2391,7 @@ mod test {
let mut s = socket(); let mut s = socket();
s.local_seq_no = LOCAL_SEQ; s.local_seq_no = LOCAL_SEQ;
s.connect(REMOTE_END, LOCAL_END).unwrap(); s.connect(REMOTE_END, LOCAL_END).unwrap();
sanity!(s, socket_syn_sent()); sanity!(s, socket_syn_sent_with_local_ipendpoint(LOCAL_END));
} }
#[test] #[test]