Merge pull request #1182 from aarroyoc/sockets-arity

fix socket_client_open/3
This commit is contained in:
Mark Thom
2022-01-09 12:24:39 -07:00
committed by GitHub
2 changed files with 6 additions and 40 deletions

View File

@@ -442,7 +442,7 @@ enum SystemClauseType {
SkipMaxList,
#[strum_discriminants(strum(props(Arity = "1", Name = "$sleep")))]
Sleep,
#[strum_discriminants(strum(props(Arity = "8", Name = "$socket_client_open")))]
#[strum_discriminants(strum(props(Arity = "7", Name = "$socket_client_open")))]
SocketClientOpen,
#[strum_discriminants(strum(props(Arity = "3", Name = "$socket_server_open")))]
SocketServerOpen,

View File

@@ -4115,7 +4115,7 @@ impl Machine {
let socket_atom = cell_as_atom!(addr);
let _port = read_heap_cell!(port,
let port = read_heap_cell!(port,
(HeapCellValueTag::Atom, (name, arity)) => {
debug_assert_eq!(arity, 0);
name
@@ -4132,9 +4132,10 @@ impl Machine {
);
let socket_addr = if socket_atom == atom!("") {
atom!("127.0.0.1")
atom!("127.0.0.1:80")
} else {
socket_atom
let buffer = format!("{}:{}", socket_atom.as_str(), port.as_str());
self.machine_st.atom_tbl.build_with(&buffer)
};
let alias = self.machine_st.registers[4];
@@ -4160,42 +4161,7 @@ impl Machine {
let stream = match TcpStream::connect(socket_addr.as_str()).map_err(|e| e.kind()) {
Ok(tcp_stream) => {
let mut stream = {
let tls = cell_as_atom!(self.machine_st.store(self.machine_st.deref(
self.machine_st.registers[8]
)));
match tls {
atom!("false") => {
Stream::from_tcp_stream(socket_addr, tcp_stream, &mut self.machine_st.arena)
}
atom!("true") => {
let connector = TlsConnector::new().unwrap();
let stream = Stream::from_tcp_stream(
socket_addr,
tcp_stream,
&mut self.machine_st.arena,
);
let stream =
match connector.connect(socket_atom.as_str(), stream) {
Ok(tls_stream) => tls_stream,
Err(_) => {
return Err(self.machine_st.open_permission_error(
addr,
atom!("socket_client_open"),
3,
));
}
};
Stream::from_tls_stream(atom!("TLS"), stream, &mut self.machine_st.arena)
}
_ => {
unreachable!()
}
}
};
let mut stream = Stream::from_tcp_stream(socket_addr, tcp_stream, &mut self.machine_st.arena);
*stream.options_mut() = options;